Phase 1 Kappa starting point: use value of 10 t/km^2 from McCormack et al. 20xx to establish a steady model. Match model to time-averaged fishing (catch)

Phase 2 Then use historical fishMIP values to estimate the profile of the phytoplakton size spectrum

ACEAS data: Can we get empirical phytoplankton or zooplankton size spectra (BCG ARGO floats or particle counters) Jase Everett or ACEAS folks

Using pico (6.94559e-11) and large (6.06131e-07) phyto midpoints from Phoebe’s method as the assumed phytoplankton size range. ‘Spread’ the biomass estimate from McCormack of 10 t/km^2 across that size range and using Barnes equation to estimate the density at the intercept (density per gram at 0 on log scale): kappa = 17.9

Kappa for the whole model domain is 17.9 * 1.474341e+12 = 2.63907e+13

Setting kappa: How do we want to express the model domain. m^2 or the entire domain volume? Banzare Bank model domain is 1.474341e+12 [m^2]

Determine the size range for the phytoplankton from Stacey’s model - Make sure it’s density per

Can use historical fishMIP values to estimate the kappa value

https://github.com/pwoodworth-jefcoats/therMizer-FishMIP-2022-HI/blob/main/ClimateForcing/Plankton/Prep_Plankton_therMizer.Rmd * Double check all units to make sure they match * Size classes hard-coded so make sure to edit * time steps also hard-coded (need to adjust the arrays)

To get the starting point for Phoebe’s script, need a timeseries of total carbon density

Steady state is the base model (null hypothesis..) that fulfills the following criteria. It allows us to investigate change relative to the base model.

Clear rule for the model to represent endotherms

Within 25% biomass estimates

Realised PPMRs are consistent with empirical knowledge

Ontogenetic shifts

Unexploited size spectrum that is within ‘x’ of the expected by theory (definitely negative)

Sheldon biomass distribution = approx. 0

Emergent versus constrained

Production to biomass ratios - Ecopath estimates

trophic level comparison with ecopath models

Borrowing from other models, piecing the evidence together to allow us to explore the S&F of ecosystem with plankton to whales.

KEY QUESTIONS:

What are the emergent ecosystem properties, productivity, resilience etc,

How sensitive are ecosystem properties to perturbation of uncertain parameters (mesopelagic biomass, kappa etc)

Load libraries

remotes::install_github("sizespectrum/mizerExperimental")
Skipping install of 'mizerExperimental' from a github remote, the SHA1 (bbbf0828) has not changed since last install.
  Use `force = TRUE` to force installation
library(mizerExperimental)
# remotes::install_github("sizespectrum/mizerMR")
library(mizer)
# library(mizerMR)
library(tidyverse)
library(plotly)
# library(lhs)

Load group parameters

h values from data for some groups. Can try developing a model with them intitally, but it may require deleting all h values and proceeding from the beginning again with default caluclations from mizer using k_vb

k_vb_string <- c(0.4,0.3608333,0.1825,0.15,1,0.2,0.5,0.06,0.2,0.2,0.2,0.2,0.2,0.2,0.2) # to use all k_vb values and instead of h

groups_raw <- read.csv("group params/trait_groups_params_vCWC.csv")

groups_no_h <- groups_raw[,-7]

# groups_no_h$biomass_observed

groups <- groups_no_h

k_vb_string <- c(0.4,0.3608333,0.1825,0.15,1,0.2,0.5,0.06,0.2,0.2,0.2,0.2,0.2,0.2,0.2) # to use all k_vb values and instead of h

groups_raw$k_vb <- k_vb_string
groups$k_vb <- k_vb_string

# species_params <- groups

# species_params[6,4] #max size for small divers
# species_params[6,3] #maturation size
# species_params[6,2] #minimum size
# 
# species_params[6,3] <- 0.85*species_params[6,4]
# species_params[9,3] <- 0.99*species_params[9,4]
# 
# groups_raw[6,3] <- 0.85*groups_raw[6,4]
# groups_raw[9,3] <- 0.99*groups_raw[9,4]
groups

Run a range of models to different biomass estimates Use an ensemble approach Perturbation to test the change in size structure and functions

Load interaction matrix

theta <- readRDS("interaction matrix/trait_groups_interaction_matrix_vCWC.RDS")
theta
theta[13,13]
[1] 1
theta[13,13] <- 0

theta[13,13]
[1] 0

Starting with empirically derived h values for some groups Create param object

params_h_default <- newMultispeciesParams(species_params = groups, 
                                interaction = theta, 
                                kappa = 2.63907e+13,
                                w_pp_cutoff = 10000,
                                n = 3/4, p = 3/4)
For the species leopard seals, large divers, minke whales, sperm whales the value for `w_mat` is not smaller than that of `w_max`. I have corrected that by setting it to about 25% of `w_mat.
For the species small divers, leopard seals the value for `w_min` is not smaller than that of `w_mat`. I have reduced the values.
No h provided for some species, so using age at maturity to calculate it.
Because the age at maturity is not known, I need to fall back to using von Bertalanffy parameters, where available, and
this is not reliable.
No ks column so calculating from critical feeding level.
Using z0 = z0pre * w_max ^ z0exp for missing z0 values.
Using f0, h, lambda, kappa and the predation kernel to calculate gamma.
# params <- newMultispeciesParams(species_params = groups_raw,
#                                 interaction = theta,
#                                 w_pp_cutoff = 1,
#                                 n = 3/4, p = 3/4)

get_h_default(params_h_default)
 [1]   9.436809  22.231901  12.707084  18.972280  48.143236  11.809790 128.200831  17.996374  56.988643  46.770049  25.155954  24.023236
[13]  25.150598  37.728272  97.635963
# get_h_default(params)

# params_h_default@species_params$h - params@species_params$h
box.params <- params_h_default

box.params@species_params$ppmr_min[box.params@species_params$species == "baleen whales"]  <- 1e5
box.params@species_params$ppmr_max[box.params@species_params$species == "baleen whales"] <-5e7
box.params@species_params$pred_kernel_type[box.params@species_params$species == "baleen whales"] <- "box"
params_v1 <- box.params

params_v1@species_params$w_mat[params_v1@species_params$species == "leopard seals"]  <- 3.480000e+05 * 0.9
params_v1@species_params$w_mat[params_v1@species_params$species == "large divers"]  <- 2.024000e+06 * 0.9
params_v1@species_params$w_mat[params_v1@species_params$species == "minke whales"]  <- 6.000000e+06 * 0.9
params_v1@species_params$w_mat[params_v1@species_params$species == "sperm whales"]  <- 3.650000e+07 * 0.9

params_v1 <- setParams(params_v1)
params_v2 <- params_v1

params_v2@species_params$w_min[params_v2@species_params$species == "small divers"]  <- params_v2@species_params$w_mat[params_v2@species_params$species == "small divers"] * 0.85
params_v2@species_params$w_min[params_v2@species_params$species == "leopard seals"]  <- params_v2@species_params$w_mat[params_v2@species_params$species == "leopard seals"] * 0.85

params_v2 <- setParams(params_v2)

First simulation using raw param values Need to adjust starting Rmax values. Use Julia’s quick calibration using kappa (although starting kappa is a total guess as well)

params_guessed <- params_v2

params_guessed@species_params$R_max <- params_guessed@resource_params$kappa*params_guessed@species_params$w_max^-1.5

params_guessed <- setParams(params_guessed)

sim_guessed <- project(params_guessed, effort=0)

[=========>----------------------------------]  23% ETA:  1s
[=========>----------------------------------]  24% ETA:  1s
[==========>---------------------------------]  25% ETA:  1s
[==========>---------------------------------]  26% ETA:  1s
[===========>--------------------------------]  27% ETA:  1s
[===========>--------------------------------]  28% ETA:  1s
[============>-------------------------------]  29% ETA:  1s
[============>-------------------------------]  30% ETA:  1s
[=============>------------------------------]  31% ETA:  1s
[=============>------------------------------]  32% ETA:  1s
[=============>------------------------------]  33% ETA:  1s
[==============>-----------------------------]  34% ETA:  1s
[==============>-----------------------------]  35% ETA:  1s
[===============>----------------------------]  36% ETA:  1s
[===============>----------------------------]  37% ETA:  1s
[================>---------------------------]  38% ETA:  1s
[================>---------------------------]  39% ETA:  1s
[================>---------------------------]  40% ETA:  1s
[=================>--------------------------]  41% ETA:  1s
[=================>--------------------------]  42% ETA:  1s
[==================>-------------------------]  43% ETA:  1s
[==================>-------------------------]  44% ETA:  1s
[===================>------------------------]  45% ETA:  1s
[===================>------------------------]  46% ETA:  1s
[===================>------------------------]  47% ETA:  1s
[====================>-----------------------]  48% ETA:  1s
[====================>-----------------------]  49% ETA:  1s
[=====================>----------------------]  50% ETA:  1s
[======================>---------------------]  51% ETA:  1s
[======================>---------------------]  52% ETA:  1s
[=======================>--------------------]  53% ETA:  0s
[=======================>--------------------]  54% ETA:  0s
[=======================>--------------------]  55% ETA:  0s
[========================>-------------------]  56% ETA:  0s
[========================>-------------------]  57% ETA:  0s
[=========================>------------------]  58% ETA:  0s
[=========================>------------------]  59% ETA:  0s
[==========================>-----------------]  60% ETA:  0s
[==========================>-----------------]  61% ETA:  0s
[==========================>-----------------]  62% ETA:  0s
[===========================>----------------]  63% ETA:  0s
[===========================>----------------]  64% ETA:  0s
[============================>---------------]  65% ETA:  0s
[============================>---------------]  66% ETA:  0s
[=============================>--------------]  67% ETA:  0s
[=============================>--------------]  68% ETA:  0s
[=============================>--------------]  69% ETA:  0s
[==============================>-------------]  70% ETA:  0s
[==============================>-------------]  71% ETA:  0s
[===============================>------------]  72% ETA:  0s
[===============================>------------]  73% ETA:  0s
[================================>-----------]  74% ETA:  0s
[================================>-----------]  75% ETA:  0s
[=================================>----------]  76% ETA:  0s
[=================================>----------]  77% ETA:  0s
[=================================>----------]  78% ETA:  0s
[==================================>---------]  79% ETA:  0s
[==================================>---------]  80% ETA:  0s
[===================================>--------]  81% ETA:  0s
[===================================>--------]  82% ETA:  0s
[====================================>-------]  83% ETA:  0s
[====================================>-------]  84% ETA:  0s
[====================================>-------]  85% ETA:  0s
[=====================================>------]  86% ETA:  0s
[=====================================>------]  87% ETA:  0s
[======================================>-----]  88% ETA:  0s
[======================================>-----]  89% ETA:  0s
[=======================================>----]  90% ETA:  0s
[=======================================>----]  91% ETA:  0s
[========================================>---]  92% ETA:  0s
[========================================>---]  93% ETA:  0s
[========================================>---]  94% ETA:  0s
[=========================================>--]  95% ETA:  0s
[=========================================>--]  96% ETA:  0s
[==========================================>-]  97% ETA:  0s
[==========================================>-]  98% ETA:  0s
[===========================================>]  99% ETA:  0s
plot(sim_guessed)

plotlyFeedingLevel(sim_guessed)
plotlyBiomass(sim_guessed)
# plotDiet(sim_guessed)
plotSpectra(sim_guessed)

Apex predators have the most diverse diet and are only preying upon dynamic groups. However, this means they don’t have enough to eat. We can either open up resources available to them, although the empirical observations suggest that they should be eating the larger inviduals of groups like divers. So, instead of increasing beta or increasing the width of their feeding kernel, we will try to add a new resource spectrum that only apex predators can access to aid their growth and reproduction. If we can reach a steady state in this fashion, then we can remove the additional resource with further calibration efforts.

plotDiet(params_guessed, species = "baleen whales")
Error: 'plotDataFrame' is not an exported object from 'namespace:mizerExperimental'
params_guessed@species_params$species
 [1] "euphausiids"              "mesopelagic fishes"       "bathypelagic fishes"      "shelf and coastal fishes"
 [5] "flying birds"             "small divers"             "squids"                   "toothfishes"             
 [9] "leopard seals"            "medium divers"            "large divers"             "minke whales"            
[13] "orca"                     "sperm whales"             "baleen whales"           
params_guessed@species_params$R_max
 [1] 4.693004e+12 7.097968e+09 1.779177e+09 2.213787e+08 9.726029e+07 5.678375e+07 8.849487e+06 4.219330e+05 1.285529e+05 1.815979e+04
[11] 9.165057e+03 1.795660e+03 1.795660e+03 1.196773e+02 2.524615e+01
params_v1 <- params_guessed

# params_v1@species_params$R_max[params_v1@species_params$species == "orca"] <- Inf
params_v1@species_params$gamma[params_v1@species_params$species == "orca"] <- params_v1@species_params$gamma[params_v1@species_params$species == "orca"] * 50
params_v1 <- setParams(params_v1)

sim_guessed <- project(params_v1, effort=0, t_max = 1000)

[--------------------------------------------]   1% ETA: 19s
[>-------------------------------------------]   1% ETA: 19s
[>-------------------------------------------]   1% ETA: 18s
[>-------------------------------------------]   2% ETA: 18s
[>-------------------------------------------]   2% ETA: 17s
[>-------------------------------------------]   2% ETA: 18s
[>-------------------------------------------]   2% ETA: 17s
[>-------------------------------------------]   2% ETA: 18s
[>-------------------------------------------]   3% ETA: 17s
[>-------------------------------------------]   3% ETA: 18s
[>-------------------------------------------]   3% ETA: 17s
[=>------------------------------------------]   3% ETA: 17s
[=>------------------------------------------]   4% ETA: 23s
[=>------------------------------------------]   4% ETA: 22s
[=>------------------------------------------]   4% ETA: 21s
[=>------------------------------------------]   4% ETA: 20s
[=>------------------------------------------]   5% ETA: 21s
[=>------------------------------------------]   5% ETA: 20s
[=>------------------------------------------]   5% ETA: 19s
[=>------------------------------------------]   6% ETA: 19s
[==>-----------------------------------------]   6% ETA: 19s
[==>-----------------------------------------]   6% ETA: 18s
[==>-----------------------------------------]   7% ETA: 18s
[==>-----------------------------------------]   7% ETA: 17s
[==>-----------------------------------------]   8% ETA: 17s
[===>----------------------------------------]   8% ETA: 17s
[===>----------------------------------------]   8% ETA: 16s
[===>----------------------------------------]   8% ETA: 17s
[===>----------------------------------------]   8% ETA: 16s
[===>----------------------------------------]   9% ETA: 16s
[===>----------------------------------------]  10% ETA: 16s
[===>----------------------------------------]  10% ETA: 15s
[====>---------------------------------------]  10% ETA: 15s
[====>---------------------------------------]  11% ETA: 15s
[====>---------------------------------------]  12% ETA: 15s
[====>---------------------------------------]  12% ETA: 14s
[=====>--------------------------------------]  13% ETA: 14s
[=====>--------------------------------------]  14% ETA: 14s
[=====>--------------------------------------]  14% ETA: 15s
[=====>--------------------------------------]  15% ETA: 15s
[======>-------------------------------------]  15% ETA: 15s
[======>-------------------------------------]  16% ETA: 15s
[======>-------------------------------------]  16% ETA: 14s
[======>-------------------------------------]  17% ETA: 14s
[=======>------------------------------------]  17% ETA: 14s
[=======>------------------------------------]  18% ETA: 14s
[=======>------------------------------------]  19% ETA: 14s
[=======>------------------------------------]  19% ETA: 13s
[========>-----------------------------------]  19% ETA: 13s
[========>-----------------------------------]  20% ETA: 13s
[========>-----------------------------------]  21% ETA: 13s
[========>-----------------------------------]  22% ETA: 13s
[=========>----------------------------------]  22% ETA: 13s
[=========>----------------------------------]  23% ETA: 13s
[=========>----------------------------------]  24% ETA: 13s
[==========>---------------------------------]  24% ETA: 13s
[==========>---------------------------------]  25% ETA: 13s
[==========>---------------------------------]  25% ETA: 12s
[==========>---------------------------------]  26% ETA: 12s
[===========>--------------------------------]  26% ETA: 12s
[===========>--------------------------------]  27% ETA: 12s
[===========>--------------------------------]  28% ETA: 12s
[============>-------------------------------]  28% ETA: 11s
[============>-------------------------------]  29% ETA: 11s
[============>-------------------------------]  30% ETA: 11s
[============>-------------------------------]  31% ETA: 11s
[=============>------------------------------]  31% ETA: 11s
[=============>------------------------------]  32% ETA: 11s
[=============>------------------------------]  33% ETA: 11s
[==============>-----------------------------]  33% ETA: 11s
[==============>-----------------------------]  34% ETA: 11s
[==============>-----------------------------]  35% ETA: 11s
[==============>-----------------------------]  35% ETA: 10s
[===============>----------------------------]  35% ETA: 10s
[===============>----------------------------]  36% ETA: 10s
[===============>----------------------------]  37% ETA: 10s
[================>---------------------------]  38% ETA: 10s
[================>---------------------------]  39% ETA: 10s
[================>---------------------------]  39% ETA:  9s
[================>---------------------------]  40% ETA:  9s
[=================>--------------------------]  40% ETA:  9s
[=================>--------------------------]  41% ETA:  9s
[=================>--------------------------]  42% ETA:  9s
[==================>-------------------------]  42% ETA:  9s
[==================>-------------------------]  43% ETA:  9s
[==================>-------------------------]  44% ETA:  9s
[===================>------------------------]  44% ETA:  9s
[===================>------------------------]  45% ETA:  9s
[===================>------------------------]  46% ETA:  9s
[===================>------------------------]  46% ETA:  8s
[===================>------------------------]  47% ETA:  8s
[====================>-----------------------]  47% ETA:  8s
[====================>-----------------------]  48% ETA:  8s
[====================>-----------------------]  49% ETA:  8s
[=====================>----------------------]  49% ETA:  8s
[=====================>----------------------]  50% ETA:  8s
[=====================>----------------------]  51% ETA:  8s
[======================>---------------------]  51% ETA:  8s
[======================>---------------------]  52% ETA:  8s
[======================>---------------------]  52% ETA:  7s
[======================>---------------------]  53% ETA:  7s
[=======================>--------------------]  53% ETA:  7s
[=======================>--------------------]  54% ETA:  7s
[=======================>--------------------]  55% ETA:  7s
[=======================>--------------------]  56% ETA:  7s
[========================>-------------------]  56% ETA:  7s
[========================>-------------------]  57% ETA:  7s
[========================>-------------------]  58% ETA:  7s
[=========================>------------------]  58% ETA:  6s
[=========================>------------------]  59% ETA:  6s
[=========================>------------------]  60% ETA:  6s
[==========================>-----------------]  60% ETA:  6s
[==========================>-----------------]  61% ETA:  6s
[==========================>-----------------]  62% ETA:  6s
[===========================>----------------]  63% ETA:  6s
[===========================>----------------]  64% ETA:  6s
[===========================>----------------]  65% ETA:  5s
[============================>---------------]  65% ETA:  5s
[============================>---------------]  66% ETA:  5s
[============================>---------------]  67% ETA:  5s
[=============================>--------------]  67% ETA:  5s
[=============================>--------------]  68% ETA:  5s
[=============================>--------------]  69% ETA:  5s
[==============================>-------------]  69% ETA:  5s
[==============================>-------------]  70% ETA:  5s
[==============================>-------------]  71% ETA:  5s
[==============================>-------------]  71% ETA:  4s
[==============================>-------------]  72% ETA:  4s
[===============================>------------]  72% ETA:  4s
[===============================>------------]  73% ETA:  4s
[===============================>------------]  74% ETA:  4s
[================================>-----------]  74% ETA:  4s
[================================>-----------]  75% ETA:  4s
[================================>-----------]  76% ETA:  4s
[=================================>----------]  76% ETA:  4s
[=================================>----------]  77% ETA:  4s
[=================================>----------]  77% ETA:  3s
[=================================>----------]  78% ETA:  3s
[==================================>---------]  78% ETA:  3s
[==================================>---------]  79% ETA:  3s
[==================================>---------]  80% ETA:  3s
[==================================>---------]  81% ETA:  3s
[===================================>--------]  81% ETA:  3s
[===================================>--------]  82% ETA:  3s
[===================================>--------]  83% ETA:  3s
[====================================>-------]  83% ETA:  3s
[====================================>-------]  84% ETA:  3s
[====================================>-------]  84% ETA:  2s
[====================================>-------]  85% ETA:  2s
[=====================================>------]  85% ETA:  2s
[=====================================>------]  86% ETA:  2s
[=====================================>------]  87% ETA:  2s
[======================================>-----]  88% ETA:  2s
[======================================>-----]  89% ETA:  2s
[======================================>-----]  90% ETA:  2s
[=======================================>----]  90% ETA:  2s
[=======================================>----]  90% ETA:  1s
[=======================================>----]  91% ETA:  1s
[=======================================>----]  92% ETA:  1s
[========================================>---]  92% ETA:  1s
[========================================>---]  93% ETA:  1s
[========================================>---]  94% ETA:  1s
[=========================================>--]  94% ETA:  1s
[=========================================>--]  95% ETA:  1s
[=========================================>--]  96% ETA:  1s
[=========================================>--]  97% ETA:  1s
[==========================================>-]  97% ETA:  1s
[==========================================>-]  97% ETA:  0s
[==========================================>-]  98% ETA:  0s
[==========================================>-]  99% ETA:  0s
[===========================================>]  99% ETA:  0s
[===========================================>] 100% ETA:  0s
plot(sim_guessed)

Refine box feeding kernel for the baleen whales max ppmr value are based on w_max baleen whale feeding on w_min euphausiids min ppmr value based on w_min baleen whale feeding on w_max euphausiids

params_v2 <- params_v1

params_v2@species_params$w_min[params_v2@species_params$species == "baleen whales"]
[1] 2250000
params_v2@species_params$w_max[params_v2@species_params$species == "baleen whales"]
[1] 1.03e+08
params_v2@species_params$w_min[params_v2@species_params$species == "euphausiids"]
[1] 6.31e-05
params_v2@species_params$w_max[params_v2@species_params$species == "euphausiids"]
[1] 3.162278
# 1.03e+08/6.31e-05 # w_max baleen whale divided by w_min euphausiids
# 2250000/3.162278 # w_min baleen whale divided by w_max euphausiids

params_v2@species_params$ppmr_min[params_v2@species_params$species == "baleen whales"]  <- 711512.4
params_v2@species_params$ppmr_max[params_v2@species_params$species == "baleen whales"] <- 1.63233e+12

# params_v2@species_params$ppmr_min[params_v2@species_params$species == "baleen whales"]  <- 1e5
# params_v2@species_params$ppmr_max[params_v2@species_params$species == "baleen whales"] <-5e7
params_v2@species_params$pred_kernel_type[params_v2@species_params$species == "baleen whales"] <- "box"
params_v2 <- setParams(params_v2)

sim_v2 <- project(params_v2, effort=0, t_max = 1000)

[>-------------------------------------------]   2% ETA: 13s
[>-------------------------------------------]   2% ETA: 14s
[>-------------------------------------------]   3% ETA: 14s
[>-------------------------------------------]   3% ETA: 13s
[>-------------------------------------------]   3% ETA: 14s
[>-------------------------------------------]   3% ETA: 13s
[>-------------------------------------------]   3% ETA: 14s
[=>------------------------------------------]   3% ETA: 14s
[=>------------------------------------------]   4% ETA: 14s
[=>------------------------------------------]   5% ETA: 13s
[=>------------------------------------------]   5% ETA: 14s
[=>------------------------------------------]   5% ETA: 13s
[=>------------------------------------------]   5% ETA: 14s
[=>------------------------------------------]   6% ETA: 14s
[==>-----------------------------------------]   6% ETA: 14s
[==>-----------------------------------------]   6% ETA: 13s
[==>-----------------------------------------]   6% ETA: 14s
[==>-----------------------------------------]   6% ETA: 13s
[==>-----------------------------------------]   6% ETA: 14s
[==>-----------------------------------------]   7% ETA: 14s
[==>-----------------------------------------]   7% ETA: 13s
[==>-----------------------------------------]   7% ETA: 14s
[==>-----------------------------------------]   7% ETA: 13s
[==>-----------------------------------------]   7% ETA: 16s
[==>-----------------------------------------]   8% ETA: 16s
[===>----------------------------------------]   8% ETA: 16s
[===>----------------------------------------]   8% ETA: 15s
[===>----------------------------------------]   9% ETA: 15s
[===>----------------------------------------]  10% ETA: 15s
[====>---------------------------------------]  10% ETA: 15s
[====>---------------------------------------]  10% ETA: 14s
[====>---------------------------------------]  11% ETA: 15s
[====>---------------------------------------]  11% ETA: 14s
[====>---------------------------------------]  12% ETA: 14s
[=====>--------------------------------------]  13% ETA: 14s
[=====>--------------------------------------]  13% ETA: 13s
[=====>--------------------------------------]  14% ETA: 13s
[=====>--------------------------------------]  15% ETA: 13s
[======>-------------------------------------]  15% ETA: 13s
[======>-------------------------------------]  16% ETA: 13s
[======>-------------------------------------]  16% ETA: 14s
[======>-------------------------------------]  17% ETA: 14s
[=======>------------------------------------]  17% ETA: 14s
[=======>------------------------------------]  18% ETA: 14s
[=======>------------------------------------]  18% ETA: 13s
[=======>------------------------------------]  19% ETA: 13s
[========>-----------------------------------]  19% ETA: 13s
[========>-----------------------------------]  20% ETA: 13s
[========>-----------------------------------]  21% ETA: 13s
[========>-----------------------------------]  21% ETA: 12s
[========>-----------------------------------]  22% ETA: 12s
[=========>----------------------------------]  22% ETA: 12s
[=========>----------------------------------]  23% ETA: 12s
[=========>----------------------------------]  24% ETA: 12s
[==========>---------------------------------]  24% ETA: 12s
[==========>---------------------------------]  24% ETA: 13s
[==========>---------------------------------]  24% ETA: 12s
[==========>---------------------------------]  25% ETA: 12s
[==========>---------------------------------]  26% ETA: 12s
[===========>--------------------------------]  26% ETA: 12s
[===========>--------------------------------]  27% ETA: 12s
[===========>--------------------------------]  28% ETA: 12s
[===========>--------------------------------]  28% ETA: 11s
[============>-------------------------------]  28% ETA: 11s
[============>-------------------------------]  29% ETA: 11s
[============>-------------------------------]  30% ETA: 11s
[============>-------------------------------]  31% ETA: 11s
[=============>------------------------------]  31% ETA: 11s
[=============>------------------------------]  32% ETA: 11s
[=============>------------------------------]  33% ETA: 11s
[==============>-----------------------------]  33% ETA: 11s
[==============>-----------------------------]  34% ETA: 11s
[==============>-----------------------------]  35% ETA: 11s
[==============>-----------------------------]  35% ETA: 10s
[===============>----------------------------]  35% ETA: 10s
[===============>----------------------------]  36% ETA: 10s
[===============>----------------------------]  37% ETA: 10s
[================>---------------------------]  38% ETA: 10s
[================>---------------------------]  39% ETA: 10s
[================>---------------------------]  40% ETA:  9s
[=================>--------------------------]  40% ETA:  9s
[=================>--------------------------]  41% ETA:  9s
[=================>--------------------------]  41% ETA: 10s
[=================>--------------------------]  41% ETA:  9s
[=================>--------------------------]  42% ETA:  9s
[==================>-------------------------]  42% ETA:  9s
[==================>-------------------------]  43% ETA:  9s
[==================>-------------------------]  44% ETA:  9s
[===================>------------------------]  44% ETA:  9s
[===================>------------------------]  45% ETA:  9s
[===================>------------------------]  46% ETA:  9s
[===================>------------------------]  46% ETA:  8s
[===================>------------------------]  47% ETA:  8s
[====================>-----------------------]  47% ETA:  8s
[====================>-----------------------]  48% ETA:  8s
[====================>-----------------------]  49% ETA:  8s
[=====================>----------------------]  49% ETA:  8s
[=====================>----------------------]  50% ETA:  8s
[=====================>----------------------]  51% ETA:  8s
[======================>---------------------]  51% ETA:  8s
[======================>---------------------]  52% ETA:  8s
[======================>---------------------]  53% ETA:  8s
[======================>---------------------]  53% ETA:  7s
[=======================>--------------------]  53% ETA:  7s
[=======================>--------------------]  54% ETA:  7s
[=======================>--------------------]  55% ETA:  7s
[=======================>--------------------]  56% ETA:  7s
[========================>-------------------]  56% ETA:  7s
[========================>-------------------]  57% ETA:  7s
[========================>-------------------]  58% ETA:  7s
[=========================>------------------]  58% ETA:  7s
[=========================>------------------]  59% ETA:  7s
[=========================>------------------]  59% ETA:  6s
[=========================>------------------]  60% ETA:  6s
[==========================>-----------------]  60% ETA:  6s
[==========================>-----------------]  61% ETA:  6s
[==========================>-----------------]  62% ETA:  6s
[===========================>----------------]  63% ETA:  6s
[===========================>----------------]  64% ETA:  6s
[===========================>----------------]  65% ETA:  6s
[============================>---------------]  65% ETA:  6s
[============================>---------------]  66% ETA:  6s
[============================>---------------]  66% ETA:  5s
[============================>---------------]  67% ETA:  5s
[=============================>--------------]  67% ETA:  5s
[=============================>--------------]  68% ETA:  5s
[=============================>--------------]  69% ETA:  5s
[==============================>-------------]  69% ETA:  5s
[==============================>-------------]  70% ETA:  5s
[==============================>-------------]  71% ETA:  5s
[==============================>-------------]  72% ETA:  5s
[===============================>------------]  72% ETA:  5s
[===============================>------------]  72% ETA:  4s
[===============================>------------]  73% ETA:  4s
[===============================>------------]  74% ETA:  4s
[================================>-----------]  74% ETA:  4s
[================================>-----------]  75% ETA:  4s
[================================>-----------]  76% ETA:  4s
[=================================>----------]  76% ETA:  4s
[=================================>----------]  77% ETA:  4s
[=================================>----------]  78% ETA:  4s
[=================================>----------]  78% ETA:  3s
[==================================>---------]  78% ETA:  3s
[==================================>---------]  79% ETA:  3s
[==================================>---------]  80% ETA:  3s
[==================================>---------]  81% ETA:  3s
[===================================>--------]  81% ETA:  3s
[===================================>--------]  82% ETA:  3s
[===================================>--------]  83% ETA:  3s
[====================================>-------]  83% ETA:  3s
[====================================>-------]  84% ETA:  3s
[====================================>-------]  84% ETA:  2s
[====================================>-------]  85% ETA:  2s
[=====================================>------]  85% ETA:  2s
[=====================================>------]  86% ETA:  2s
[=====================================>------]  87% ETA:  2s
[======================================>-----]  88% ETA:  2s
[======================================>-----]  89% ETA:  2s
[======================================>-----]  90% ETA:  2s
[=======================================>----]  90% ETA:  2s
[=======================================>----]  91% ETA:  2s
[=======================================>----]  91% ETA:  1s
[=======================================>----]  92% ETA:  1s
[========================================>---]  92% ETA:  1s
[========================================>---]  93% ETA:  1s
[========================================>---]  94% ETA:  1s
[=========================================>--]  94% ETA:  1s
[=========================================>--]  95% ETA:  1s
[=========================================>--]  96% ETA:  1s
[=========================================>--]  97% ETA:  1s
[==========================================>-]  97% ETA:  1s
[==========================================>-]  97% ETA:  0s
[==========================================>-]  98% ETA:  0s
[==========================================>-]  99% ETA:  0s
[===========================================>]  99% ETA:  0s
[===========================================>] 100% ETA:  0s
plot(sim_v2)

Now I will try to reduce the max size of the resource

params_v3@resource_params$w_pp_cutoff
[1] 100
params_v3 <- setParams(params_v3)

sim_v3 <- project(params_v3, effort=0, t_max = 1000)

[--------------------------------------------]   1% ETA: 41s
[>-------------------------------------------]   1% ETA: 38s
[>-------------------------------------------]   1% ETA: 36s
[>-------------------------------------------]   1% ETA: 35s
[>-------------------------------------------]   1% ETA: 33s
[>-------------------------------------------]   2% ETA: 32s
[>-------------------------------------------]   2% ETA: 31s
[>-------------------------------------------]   2% ETA: 30s
[>-------------------------------------------]   2% ETA: 29s
[>-------------------------------------------]   2% ETA: 28s
[>-------------------------------------------]   2% ETA: 27s
[>-------------------------------------------]   2% ETA: 26s
[>-------------------------------------------]   2% ETA: 25s
[>-------------------------------------------]   3% ETA: 25s
[>-------------------------------------------]   3% ETA: 24s
[>-------------------------------------------]   3% ETA: 23s
[>-------------------------------------------]   3% ETA: 22s
[=>------------------------------------------]   3% ETA: 22s
[=>------------------------------------------]   4% ETA: 22s
[=>------------------------------------------]   4% ETA: 21s
[=>------------------------------------------]   4% ETA: 26s
[=>------------------------------------------]   4% ETA: 25s
[=>------------------------------------------]   5% ETA: 24s
[=>------------------------------------------]   5% ETA: 23s
[=>------------------------------------------]   5% ETA: 22s
[=>------------------------------------------]   6% ETA: 22s
[==>-----------------------------------------]   6% ETA: 22s
[==>-----------------------------------------]   6% ETA: 21s
[==>-----------------------------------------]   7% ETA: 21s
[==>-----------------------------------------]   7% ETA: 20s
[==>-----------------------------------------]   7% ETA: 19s
[==>-----------------------------------------]   8% ETA: 19s
[===>----------------------------------------]   8% ETA: 19s
[===>----------------------------------------]   9% ETA: 18s
[===>----------------------------------------]  10% ETA: 18s
[===>----------------------------------------]  10% ETA: 17s
[====>---------------------------------------]  10% ETA: 17s
[====>---------------------------------------]  11% ETA: 17s
[====>---------------------------------------]  11% ETA: 16s
[====>---------------------------------------]  12% ETA: 16s
[=====>--------------------------------------]  13% ETA: 16s
[=====>--------------------------------------]  13% ETA: 15s
[=====>--------------------------------------]  14% ETA: 15s
[=====>--------------------------------------]  15% ETA: 15s
[======>-------------------------------------]  15% ETA: 15s
[======>-------------------------------------]  15% ETA: 16s
[======>-------------------------------------]  16% ETA: 16s
[======>-------------------------------------]  16% ETA: 15s
[======>-------------------------------------]  17% ETA: 15s
[=======>------------------------------------]  17% ETA: 15s
[=======>------------------------------------]  17% ETA: 16s
[=======>------------------------------------]  18% ETA: 16s
[=======>------------------------------------]  18% ETA: 15s
[=======>------------------------------------]  19% ETA: 15s
[========>-----------------------------------]  19% ETA: 15s
[========>-----------------------------------]  20% ETA: 15s
[========>-----------------------------------]  21% ETA: 14s
[========>-----------------------------------]  22% ETA: 14s
[=========>----------------------------------]  22% ETA: 14s
[=========>----------------------------------]  23% ETA: 14s
[=========>----------------------------------]  23% ETA: 13s
[=========>----------------------------------]  24% ETA: 13s
[==========>---------------------------------]  24% ETA: 13s
[==========>---------------------------------]  25% ETA: 13s
[==========>---------------------------------]  26% ETA: 13s
[===========>--------------------------------]  26% ETA: 13s
[===========>--------------------------------]  27% ETA: 13s
[===========>--------------------------------]  27% ETA: 12s
[===========>--------------------------------]  27% ETA: 13s
[===========>--------------------------------]  28% ETA: 13s
[============>-------------------------------]  28% ETA: 13s
[============>-------------------------------]  29% ETA: 13s
[============>-------------------------------]  29% ETA: 12s
[============>-------------------------------]  30% ETA: 12s
[============>-------------------------------]  31% ETA: 12s
[=============>------------------------------]  31% ETA: 12s
[=============>------------------------------]  32% ETA: 12s
[=============>------------------------------]  32% ETA: 11s
[=============>------------------------------]  33% ETA: 11s
[==============>-----------------------------]  33% ETA: 11s
[==============>-----------------------------]  34% ETA: 11s
[==============>-----------------------------]  35% ETA: 11s
[===============>----------------------------]  35% ETA: 11s
[===============>----------------------------]  36% ETA: 11s
[===============>----------------------------]  37% ETA: 11s
[===============>----------------------------]  37% ETA: 10s
[================>---------------------------]  38% ETA: 10s
[================>---------------------------]  38% ETA: 11s
[================>---------------------------]  38% ETA: 10s
[================>---------------------------]  39% ETA: 10s
[================>---------------------------]  40% ETA: 10s
[=================>--------------------------]  40% ETA: 10s
[=================>--------------------------]  41% ETA: 10s
[=================>--------------------------]  42% ETA: 10s
[==================>-------------------------]  42% ETA: 10s
[==================>-------------------------]  43% ETA: 10s
[==================>-------------------------]  43% ETA:  9s
[==================>-------------------------]  44% ETA:  9s
[===================>------------------------]  44% ETA:  9s
[===================>------------------------]  45% ETA:  9s
[===================>------------------------]  46% ETA:  9s
[===================>------------------------]  47% ETA:  9s
[====================>-----------------------]  47% ETA:  9s
[====================>-----------------------]  48% ETA:  8s
[====================>-----------------------]  49% ETA:  8s
[=====================>----------------------]  49% ETA:  8s
[=====================>----------------------]  50% ETA:  8s
[=====================>----------------------]  51% ETA:  8s
[======================>---------------------]  51% ETA:  8s
[======================>---------------------]  52% ETA:  8s
[======================>---------------------]  53% ETA:  8s
[=======================>--------------------]  53% ETA:  8s
[=======================>--------------------]  54% ETA:  8s
[=======================>--------------------]  54% ETA:  7s
[=======================>--------------------]  55% ETA:  7s
[=======================>--------------------]  56% ETA:  7s
[========================>-------------------]  56% ETA:  7s
[========================>-------------------]  57% ETA:  7s
[========================>-------------------]  58% ETA:  7s
[=========================>------------------]  58% ETA:  7s
[=========================>------------------]  59% ETA:  7s
[=========================>------------------]  60% ETA:  7s
[=========================>------------------]  60% ETA:  6s
[==========================>-----------------]  60% ETA:  6s
[==========================>-----------------]  61% ETA:  6s
[==========================>-----------------]  62% ETA:  6s
[===========================>----------------]  63% ETA:  6s
[===========================>----------------]  64% ETA:  6s
[===========================>----------------]  65% ETA:  6s
[============================>---------------]  65% ETA:  6s
[============================>---------------]  66% ETA:  5s
[============================>---------------]  67% ETA:  5s
[=============================>--------------]  67% ETA:  5s
[=============================>--------------]  68% ETA:  5s
[=============================>--------------]  69% ETA:  5s
[==============================>-------------]  69% ETA:  5s
[==============================>-------------]  70% ETA:  5s
[==============================>-------------]  71% ETA:  5s
[==============================>-------------]  72% ETA:  5s
[===============================>------------]  72% ETA:  5s
[===============================>------------]  72% ETA:  4s
[===============================>------------]  73% ETA:  4s
[===============================>------------]  74% ETA:  4s
[================================>-----------]  74% ETA:  4s
[================================>-----------]  75% ETA:  4s
[================================>-----------]  76% ETA:  4s
[=================================>----------]  76% ETA:  4s
[=================================>----------]  77% ETA:  4s
[=================================>----------]  78% ETA:  4s
[=================================>----------]  78% ETA:  3s
[==================================>---------]  78% ETA:  3s
[==================================>---------]  79% ETA:  3s
[==================================>---------]  80% ETA:  3s
[==================================>---------]  81% ETA:  3s
[===================================>--------]  81% ETA:  3s
[===================================>--------]  82% ETA:  3s
[===================================>--------]  83% ETA:  3s
[====================================>-------]  83% ETA:  3s
[====================================>-------]  84% ETA:  3s
[====================================>-------]  84% ETA:  2s
[====================================>-------]  85% ETA:  2s
[=====================================>------]  85% ETA:  2s
[=====================================>------]  86% ETA:  2s
[=====================================>------]  87% ETA:  2s
[======================================>-----]  88% ETA:  2s
[======================================>-----]  89% ETA:  2s
[======================================>-----]  90% ETA:  2s
[=======================================>----]  90% ETA:  2s
[=======================================>----]  91% ETA:  1s
[=======================================>----]  92% ETA:  1s
[========================================>---]  92% ETA:  1s
[========================================>---]  93% ETA:  1s
[========================================>---]  94% ETA:  1s
[=========================================>--]  94% ETA:  1s
[=========================================>--]  95% ETA:  1s
[=========================================>--]  96% ETA:  1s
[=========================================>--]  97% ETA:  1s
[==========================================>-]  97% ETA:  1s
[==========================================>-]  97% ETA:  0s
[==========================================>-]  98% ETA:  0s
[==========================================>-]  99% ETA:  0s
[===========================================>]  99% ETA:  0s
[===========================================>] 100% ETA:  0s
plot(sim_v3)

params_v3_steady <- steady(params_v3)
params_v3_tuned <- tuneParams(params_v3_steady)
params_v3_tuned@resource_params$w_pp_cutoff
[1] 100

sim_v5 <- project(params_v5, effort=0, t_max = 1000)

[>-------------------------------------------]   1% ETA: 15s
[>-------------------------------------------]   2% ETA: 15s
[>-------------------------------------------]   2% ETA: 14s
[>-------------------------------------------]   2% ETA: 15s
[>-------------------------------------------]   2% ETA: 14s
[>-------------------------------------------]   2% ETA: 15s
[>-------------------------------------------]   3% ETA: 15s
[=>------------------------------------------]   3% ETA: 15s
[=>------------------------------------------]   4% ETA: 15s
[=>------------------------------------------]   5% ETA: 14s
[=>------------------------------------------]   5% ETA: 15s
[=>------------------------------------------]   5% ETA: 14s
[=>------------------------------------------]   5% ETA: 15s
[=>------------------------------------------]   5% ETA: 14s
[=>------------------------------------------]   5% ETA: 15s
[=>------------------------------------------]   5% ETA: 14s
[=>------------------------------------------]   6% ETA: 15s
[==>-----------------------------------------]   6% ETA: 15s
[==>-----------------------------------------]   6% ETA: 14s
[==>-----------------------------------------]   6% ETA: 15s
[==>-----------------------------------------]   6% ETA: 14s
[==>-----------------------------------------]   7% ETA: 15s
[==>-----------------------------------------]   7% ETA: 18s
[==>-----------------------------------------]   7% ETA: 17s
[==>-----------------------------------------]   7% ETA: 18s
[==>-----------------------------------------]   7% ETA: 17s
[==>-----------------------------------------]   8% ETA: 17s
[===>----------------------------------------]   8% ETA: 17s
[===>----------------------------------------]   8% ETA: 16s
[===>----------------------------------------]   9% ETA: 16s
[===>----------------------------------------]  10% ETA: 16s
[===>----------------------------------------]  10% ETA: 15s
[====>---------------------------------------]  10% ETA: 15s
[====>---------------------------------------]  11% ETA: 15s
[====>---------------------------------------]  12% ETA: 15s
[====>---------------------------------------]  12% ETA: 14s
[=====>--------------------------------------]  13% ETA: 15s
[=====>--------------------------------------]  13% ETA: 14s
[=====>--------------------------------------]  13% ETA: 16s
[=====>--------------------------------------]  14% ETA: 16s
[=====>--------------------------------------]  14% ETA: 15s
[=====>--------------------------------------]  15% ETA: 15s
[======>-------------------------------------]  15% ETA: 15s
[======>-------------------------------------]  16% ETA: 15s
[======>-------------------------------------]  17% ETA: 14s
[=======>------------------------------------]  17% ETA: 14s
[=======>------------------------------------]  18% ETA: 14s
[=======>------------------------------------]  19% ETA: 14s
[========>-----------------------------------]  19% ETA: 14s
[========>-----------------------------------]  20% ETA: 13s
[========>-----------------------------------]  21% ETA: 13s
[========>-----------------------------------]  21% ETA: 14s
[========>-----------------------------------]  22% ETA: 14s
[=========>----------------------------------]  22% ETA: 14s
[=========>----------------------------------]  22% ETA: 13s
[=========>----------------------------------]  23% ETA: 13s
[=========>----------------------------------]  24% ETA: 13s
[==========>---------------------------------]  24% ETA: 13s
[==========>---------------------------------]  25% ETA: 13s
[==========>---------------------------------]  26% ETA: 13s
[==========>---------------------------------]  26% ETA: 12s
[===========>--------------------------------]  26% ETA: 12s
[===========>--------------------------------]  27% ETA: 12s
[===========>--------------------------------]  28% ETA: 12s
[============>-------------------------------]  28% ETA: 12s
[============>-------------------------------]  29% ETA: 12s
[============>-------------------------------]  30% ETA: 12s
[============>-------------------------------]  31% ETA: 12s
[=============>------------------------------]  31% ETA: 12s
[=============>------------------------------]  32% ETA: 12s
[=============>------------------------------]  32% ETA: 11s
[=============>------------------------------]  32% ETA: 12s
[=============>------------------------------]  32% ETA: 11s
[=============>------------------------------]  33% ETA: 11s
[==============>-----------------------------]  33% ETA: 11s
[==============>-----------------------------]  34% ETA: 11s
[==============>-----------------------------]  35% ETA: 11s
[===============>----------------------------]  35% ETA: 11s
[===============>----------------------------]  36% ETA: 11s
[===============>----------------------------]  36% ETA: 10s
[===============>----------------------------]  37% ETA: 10s
[===============>----------------------------]  37% ETA: 11s
[================>---------------------------]  38% ETA: 11s
[================>---------------------------]  38% ETA: 10s
[================>---------------------------]  39% ETA: 10s
[================>---------------------------]  40% ETA: 10s
[=================>--------------------------]  40% ETA: 10s
[=================>--------------------------]  41% ETA: 10s
[=================>--------------------------]  42% ETA: 10s
[==================>-------------------------]  42% ETA: 10s
[==================>-------------------------]  43% ETA: 10s
[==================>-------------------------]  43% ETA:  9s
[==================>-------------------------]  44% ETA:  9s
[===================>------------------------]  44% ETA:  9s
[===================>------------------------]  45% ETA:  9s
[===================>------------------------]  46% ETA:  9s
[===================>------------------------]  47% ETA:  9s
[====================>-----------------------]  47% ETA:  9s
[====================>-----------------------]  48% ETA:  9s
[====================>-----------------------]  49% ETA:  9s
[====================>-----------------------]  49% ETA:  8s
[=====================>----------------------]  49% ETA:  8s
[=====================>----------------------]  50% ETA:  8s
[=====================>----------------------]  51% ETA:  8s
[======================>---------------------]  51% ETA:  8s
[======================>---------------------]  52% ETA:  8s
[======================>---------------------]  53% ETA:  8s
[=======================>--------------------]  53% ETA:  8s
[=======================>--------------------]  54% ETA:  8s
[=======================>--------------------]  55% ETA:  8s
[=======================>--------------------]  55% ETA:  7s
[=======================>--------------------]  56% ETA:  7s
[========================>-------------------]  56% ETA:  7s
[========================>-------------------]  57% ETA:  7s
[========================>-------------------]  58% ETA:  7s
[=========================>------------------]  58% ETA:  7s
[=========================>------------------]  59% ETA:  7s
[=========================>------------------]  60% ETA:  7s
[==========================>-----------------]  60% ETA:  7s
[==========================>-----------------]  60% ETA:  6s
[==========================>-----------------]  61% ETA:  7s
[==========================>-----------------]  61% ETA:  6s
[==========================>-----------------]  62% ETA:  6s
[===========================>----------------]  63% ETA:  6s
[===========================>----------------]  64% ETA:  6s
[===========================>----------------]  65% ETA:  6s
[============================>---------------]  65% ETA:  6s
[============================>---------------]  66% ETA:  6s
[============================>---------------]  67% ETA:  6s
[============================>---------------]  67% ETA:  5s
[=============================>--------------]  67% ETA:  5s
[=============================>--------------]  68% ETA:  5s
[=============================>--------------]  69% ETA:  5s
[==============================>-------------]  69% ETA:  5s
[==============================>-------------]  70% ETA:  5s
[==============================>-------------]  71% ETA:  5s
[==============================>-------------]  72% ETA:  5s
[===============================>------------]  72% ETA:  5s
[===============================>------------]  73% ETA:  5s
[===============================>------------]  73% ETA:  4s
[===============================>------------]  74% ETA:  4s
[================================>-----------]  74% ETA:  4s
[================================>-----------]  75% ETA:  4s
[================================>-----------]  76% ETA:  4s
[=================================>----------]  76% ETA:  4s
[=================================>----------]  77% ETA:  4s
[=================================>----------]  78% ETA:  4s
[==================================>---------]  78% ETA:  4s
[==================================>---------]  79% ETA:  4s
[==================================>---------]  79% ETA:  3s
[==================================>---------]  80% ETA:  3s
[==================================>---------]  81% ETA:  3s
[===================================>--------]  81% ETA:  3s
[===================================>--------]  82% ETA:  3s
[===================================>--------]  83% ETA:  3s
[====================================>-------]  83% ETA:  3s
[====================================>-------]  84% ETA:  3s
[====================================>-------]  85% ETA:  3s
[====================================>-------]  85% ETA:  2s
[=====================================>------]  85% ETA:  2s
[=====================================>------]  86% ETA:  2s
[=====================================>------]  87% ETA:  2s
[======================================>-----]  88% ETA:  2s
[======================================>-----]  89% ETA:  2s
[======================================>-----]  90% ETA:  2s
[=======================================>----]  90% ETA:  2s
[=======================================>----]  91% ETA:  2s
[=======================================>----]  91% ETA:  1s
[=======================================>----]  92% ETA:  1s
[========================================>---]  92% ETA:  1s
[========================================>---]  93% ETA:  1s
[========================================>---]  94% ETA:  1s
[=========================================>--]  94% ETA:  1s
[=========================================>--]  95% ETA:  1s
[=========================================>--]  96% ETA:  1s
[=========================================>--]  97% ETA:  1s
[==========================================>-]  97% ETA:  1s
[==========================================>-]  97% ETA:  0s
[==========================================>-]  98% ETA:  0s
[==========================================>-]  99% ETA:  0s
[===========================================>]  99% ETA:  0s
[===========================================>] 100% ETA:  0s
plot(sim_v5)

plotlyBiomass(sim_v5)
params_v5_steady <- steady(params_v5)
params_v5_tuned <- tuneParams(params_v5_steady)
# params_v6 <- setParams(params_v5_tuned)

sim_v6 <- project(params_v5_tuned, effort=0, t_max = 2000)

[--------------------------------------------]   1% ETA: 32s
[--------------------------------------------]   1% ETA: 36s
[--------------------------------------------]   1% ETA: 37s
[--------------------------------------------]   1% ETA: 38s
[--------------------------------------------]   1% ETA: 37s
[--------------------------------------------]   1% ETA: 38s
[--------------------------------------------]   1% ETA: 39s
[--------------------------------------------]   1% ETA: 38s
[--------------------------------------------]   1% ETA: 39s
[--------------------------------------------]   1% ETA: 40s
[>-------------------------------------------]   1% ETA: 39s
[>-------------------------------------------]   1% ETA: 40s
[>-------------------------------------------]   1% ETA: 41s
[>-------------------------------------------]   1% ETA: 40s
[>-------------------------------------------]   1% ETA:  1m
[>-------------------------------------------]   2% ETA:  1m
[>-------------------------------------------]   2% ETA: 50s
[>-------------------------------------------]   2% ETA: 49s
[>-------------------------------------------]   2% ETA: 48s
[>-------------------------------------------]   2% ETA: 47s
[>-------------------------------------------]   2% ETA: 46s
[>-------------------------------------------]   2% ETA: 45s
[>-------------------------------------------]   3% ETA: 45s
[>-------------------------------------------]   3% ETA: 44s
[>-------------------------------------------]   3% ETA: 43s
[>-------------------------------------------]   3% ETA: 42s
[>-------------------------------------------]   3% ETA: 41s
[=>------------------------------------------]   3% ETA: 41s
[=>------------------------------------------]   4% ETA: 41s
[=>------------------------------------------]   4% ETA: 40s
[=>------------------------------------------]   4% ETA: 45s
[=>------------------------------------------]   4% ETA: 44s
[=>------------------------------------------]   4% ETA: 43s
[=>------------------------------------------]   5% ETA: 43s
[=>------------------------------------------]   5% ETA: 42s
[=>------------------------------------------]   5% ETA: 43s
[=>------------------------------------------]   5% ETA: 42s
[=>------------------------------------------]   5% ETA: 41s
[=>------------------------------------------]   5% ETA: 40s
[=>------------------------------------------]   6% ETA: 40s
[=>------------------------------------------]   6% ETA: 41s
[=>------------------------------------------]   6% ETA: 40s
[==>-----------------------------------------]   6% ETA: 40s
[==>-----------------------------------------]   6% ETA: 39s
[==>-----------------------------------------]   7% ETA: 39s
[==>-----------------------------------------]   7% ETA: 38s
[==>-----------------------------------------]   7% ETA: 39s
[==>-----------------------------------------]   7% ETA: 38s
[==>-----------------------------------------]   7% ETA: 41s
[==>-----------------------------------------]   7% ETA: 40s
[==>-----------------------------------------]   7% ETA: 41s
[==>-----------------------------------------]   7% ETA: 40s
[==>-----------------------------------------]   8% ETA: 40s
[==>-----------------------------------------]   8% ETA: 39s
[==>-----------------------------------------]   8% ETA: 40s
[==>-----------------------------------------]   8% ETA: 39s
[===>----------------------------------------]   8% ETA: 39s
[===>----------------------------------------]   8% ETA: 38s
[===>----------------------------------------]   9% ETA: 38s
[===>----------------------------------------]   9% ETA: 37s
[===>----------------------------------------]  10% ETA: 37s
[===>----------------------------------------]  10% ETA: 39s
[===>----------------------------------------]  10% ETA: 38s
[====>---------------------------------------]  10% ETA: 38s
[====>---------------------------------------]  11% ETA: 37s
[====>---------------------------------------]  11% ETA: 36s
[====>---------------------------------------]  12% ETA: 36s
[====>---------------------------------------]  12% ETA: 35s
[====>---------------------------------------]  12% ETA: 37s
[=====>--------------------------------------]  13% ETA: 37s
[=====>--------------------------------------]  13% ETA: 36s
[=====>--------------------------------------]  14% ETA: 35s
[=====>--------------------------------------]  14% ETA: 34s
[=====>--------------------------------------]  15% ETA: 34s
[======>-------------------------------------]  15% ETA: 34s
[======>-------------------------------------]  15% ETA: 35s
[======>-------------------------------------]  16% ETA: 35s
[======>-------------------------------------]  16% ETA: 34s
[======>-------------------------------------]  17% ETA: 34s
[======>-------------------------------------]  17% ETA: 33s
[======>-------------------------------------]  17% ETA: 34s
[======>-------------------------------------]  17% ETA: 33s
[=======>------------------------------------]  17% ETA: 33s
[=======>------------------------------------]  18% ETA: 33s
[=======>------------------------------------]  18% ETA: 34s
[=======>------------------------------------]  18% ETA: 33s
[=======>------------------------------------]  19% ETA: 33s
[=======>------------------------------------]  19% ETA: 32s
[========>-----------------------------------]  19% ETA: 32s
[========>-----------------------------------]  20% ETA: 32s
[========>-----------------------------------]  20% ETA: 31s
[========>-----------------------------------]  21% ETA: 31s
[========>-----------------------------------]  21% ETA: 32s
[========>-----------------------------------]  22% ETA: 32s
[========>-----------------------------------]  22% ETA: 31s
[=========>----------------------------------]  22% ETA: 31s
[=========>----------------------------------]  23% ETA: 31s
[=========>----------------------------------]  23% ETA: 30s
[=========>----------------------------------]  23% ETA: 31s
[=========>----------------------------------]  23% ETA: 30s
[=========>----------------------------------]  23% ETA: 31s
[=========>----------------------------------]  24% ETA: 31s
[==========>---------------------------------]  24% ETA: 31s
[==========>---------------------------------]  24% ETA: 30s
[==========>---------------------------------]  25% ETA: 30s
[==========>---------------------------------]  25% ETA: 29s
[==========>---------------------------------]  26% ETA: 29s
[===========>--------------------------------]  26% ETA: 29s
[===========>--------------------------------]  26% ETA: 30s
[===========>--------------------------------]  26% ETA: 29s
[===========>--------------------------------]  27% ETA: 29s
[===========>--------------------------------]  28% ETA: 29s
[===========>--------------------------------]  28% ETA: 28s
[============>-------------------------------]  28% ETA: 28s
[============>-------------------------------]  29% ETA: 28s
[============>-------------------------------]  30% ETA: 28s
[============>-------------------------------]  30% ETA: 27s
[============>-------------------------------]  31% ETA: 27s
[=============>------------------------------]  31% ETA: 27s
[=============>------------------------------]  32% ETA: 27s
[=============>------------------------------]  33% ETA: 27s
[=============>------------------------------]  33% ETA: 26s
[==============>-----------------------------]  33% ETA: 26s
[==============>-----------------------------]  34% ETA: 26s
[==============>-----------------------------]  35% ETA: 26s
[==============>-----------------------------]  35% ETA: 25s
[==============>-----------------------------]  35% ETA: 26s
[===============>----------------------------]  35% ETA: 26s
[===============>----------------------------]  35% ETA: 25s
[===============>----------------------------]  36% ETA: 25s
[===============>----------------------------]  37% ETA: 25s
[===============>----------------------------]  37% ETA: 24s
[===============>----------------------------]  37% ETA: 25s
[================>---------------------------]  38% ETA: 25s
[================>---------------------------]  38% ETA: 24s
[================>---------------------------]  38% ETA: 25s
[================>---------------------------]  38% ETA: 24s
[================>---------------------------]  39% ETA: 24s
[================>---------------------------]  40% ETA: 24s
[=================>--------------------------]  40% ETA: 24s
[=================>--------------------------]  40% ETA: 23s
[=================>--------------------------]  40% ETA: 24s
[=================>--------------------------]  41% ETA: 24s
[=================>--------------------------]  41% ETA: 23s
[=================>--------------------------]  42% ETA: 23s
[==================>-------------------------]  42% ETA: 23s
[==================>-------------------------]  43% ETA: 23s
[==================>-------------------------]  43% ETA: 22s
[==================>-------------------------]  43% ETA: 23s
[==================>-------------------------]  43% ETA: 22s
[==================>-------------------------]  44% ETA: 22s
[===================>------------------------]  44% ETA: 22s
[===================>------------------------]  45% ETA: 22s
[===================>------------------------]  45% ETA: 21s
[===================>------------------------]  46% ETA: 21s
[===================>------------------------]  46% ETA: 22s
[===================>------------------------]  46% ETA: 21s
[===================>------------------------]  47% ETA: 21s
[====================>-----------------------]  47% ETA: 21s
[====================>-----------------------]  48% ETA: 21s
[====================>-----------------------]  48% ETA: 20s
[====================>-----------------------]  49% ETA: 20s
[=====================>----------------------]  49% ETA: 20s
[=====================>----------------------]  50% ETA: 20s
[=====================>----------------------]  50% ETA: 19s
[=====================>----------------------]  51% ETA: 19s
[======================>---------------------]  51% ETA: 19s
[======================>---------------------]  52% ETA: 19s
[======================>---------------------]  53% ETA: 19s
[======================>---------------------]  53% ETA: 18s
[=======================>--------------------]  53% ETA: 18s
[=======================>--------------------]  54% ETA: 18s
[=======================>--------------------]  55% ETA: 18s
[=======================>--------------------]  56% ETA: 18s
[=======================>--------------------]  56% ETA: 17s
[========================>-------------------]  56% ETA: 17s
[========================>-------------------]  57% ETA: 17s
[========================>-------------------]  58% ETA: 17s
[=========================>------------------]  58% ETA: 17s
[=========================>------------------]  58% ETA: 16s
[=========================>------------------]  59% ETA: 16s
[=========================>------------------]  60% ETA: 16s
[==========================>-----------------]  60% ETA: 16s
[==========================>-----------------]  61% ETA: 16s
[==========================>-----------------]  61% ETA: 15s
[==========================>-----------------]  62% ETA: 15s
[===========================>----------------]  63% ETA: 15s
[===========================>----------------]  63% ETA: 14s
[===========================>----------------]  64% ETA: 14s
[===========================>----------------]  65% ETA: 14s
[============================>---------------]  65% ETA: 14s
[============================>---------------]  66% ETA: 14s
[============================>---------------]  66% ETA: 13s
[============================>---------------]  67% ETA: 13s
[=============================>--------------]  67% ETA: 13s
[=============================>--------------]  68% ETA: 13s
[=============================>--------------]  68% ETA: 12s
[=============================>--------------]  69% ETA: 12s
[==============================>-------------]  69% ETA: 12s
[==============================>-------------]  70% ETA: 12s
[==============================>-------------]  71% ETA: 12s
[==============================>-------------]  71% ETA: 11s
[==============================>-------------]  71% ETA: 12s
[==============================>-------------]  71% ETA: 11s
[==============================>-------------]  72% ETA: 11s
[===============================>------------]  72% ETA: 11s
[===============================>------------]  73% ETA: 11s
[===============================>------------]  73% ETA: 10s
[===============================>------------]  74% ETA: 10s
[================================>-----------]  74% ETA: 10s
[================================>-----------]  75% ETA: 10s
[================================>-----------]  76% ETA: 10s
[================================>-----------]  76% ETA:  9s
[=================================>----------]  76% ETA:  9s
[=================================>----------]  77% ETA:  9s
[=================================>----------]  78% ETA:  9s
[=================================>----------]  78% ETA:  8s
[==================================>---------]  78% ETA:  8s
[==================================>---------]  79% ETA:  8s
[==================================>---------]  80% ETA:  8s
[==================================>---------]  81% ETA:  8s
[===================================>--------]  81% ETA:  8s
[===================================>--------]  81% ETA:  7s
[===================================>--------]  82% ETA:  7s
[===================================>--------]  83% ETA:  7s
[====================================>-------]  83% ETA:  7s
[====================================>-------]  83% ETA:  6s
[====================================>-------]  84% ETA:  6s
[====================================>-------]  85% ETA:  6s
[=====================================>------]  85% ETA:  6s
[=====================================>------]  86% ETA:  6s
[=====================================>------]  86% ETA:  5s
[=====================================>------]  87% ETA:  5s
[======================================>-----]  88% ETA:  5s
[======================================>-----]  89% ETA:  4s
[======================================>-----]  90% ETA:  4s
[=======================================>----]  90% ETA:  4s
[=======================================>----]  91% ETA:  4s
[=======================================>----]  91% ETA:  3s
[=======================================>----]  92% ETA:  3s
[========================================>---]  92% ETA:  3s
[========================================>---]  93% ETA:  3s
[========================================>---]  94% ETA:  3s
[========================================>---]  94% ETA:  2s
[=========================================>--]  94% ETA:  2s
[=========================================>--]  95% ETA:  2s
[=========================================>--]  96% ETA:  2s
[=========================================>--]  96% ETA:  1s
[=========================================>--]  97% ETA:  1s
[==========================================>-]  97% ETA:  1s
[==========================================>-]  98% ETA:  1s
[==========================================>-]  99% ETA:  1s
[==========================================>-]  99% ETA:  0s
[===========================================>]  99% ETA:  0s
[===========================================>] 100% ETA:  0s
plot(sim_v6)

plotlyBiomass(sim_v6)

params_v7 <- params_v6 |>
    matchBiomasses() |> steady() |> matchBiomasses() |> steady() |>
    matchBiomasses() |> steady() |> matchBiomasses() |> steady() |>
    matchBiomasses() |> steady() |> matchBiomasses() |> steady() |>
    matchBiomasses() |> steady() |> matchBiomasses() |> steady() |>
    matchBiomasses() |> steady() |> matchBiomasses() |> steady()
Convergence was achieved in 1.5 years.
Convergence was achieved in 1.5 years.
Convergence was achieved in 1.5 years.
Convergence was achieved in 1.5 years.
Convergence was achieved in 1.5 years.
Convergence was achieved in 1.5 years.
Convergence was achieved in 1.5 years.
Convergence was achieved in 1.5 years.
Convergence was achieved in 1.5 years.
Convergence was achieved in 1.5 years.

params_v8 <- tuneGrowth(params_v7)

Listening on http://127.0.0.1:6336

params_v9 <- steady(params_v8, t_max = 1000)
Convergence was achieved in 1.5 years.
sim_v8 <- project(params_v9, effort=0, t_max = 1000)

[>-------------------------------------------]   1% ETA: 14s
[>-------------------------------------------]   2% ETA: 14s
[>-------------------------------------------]   2% ETA: 16s
[>-------------------------------------------]   2% ETA: 15s
[>-------------------------------------------]   2% ETA: 16s
[>-------------------------------------------]   2% ETA: 15s
[>-------------------------------------------]   3% ETA: 16s
[>-------------------------------------------]   3% ETA: 15s
[>-------------------------------------------]   3% ETA: 16s
[>-------------------------------------------]   3% ETA: 15s
[=>------------------------------------------]   3% ETA: 16s
[=>------------------------------------------]   4% ETA: 16s
[=>------------------------------------------]   5% ETA: 16s
[=>------------------------------------------]   5% ETA: 15s
[=>------------------------------------------]   5% ETA: 21s
[=>------------------------------------------]   5% ETA: 20s
[=>------------------------------------------]   6% ETA: 20s
[==>-----------------------------------------]   6% ETA: 20s
[==>-----------------------------------------]   6% ETA: 19s
[==>-----------------------------------------]   7% ETA: 18s
[==>-----------------------------------------]   8% ETA: 17s
[===>----------------------------------------]   8% ETA: 17s
[===>----------------------------------------]   9% ETA: 17s
[===>----------------------------------------]   9% ETA: 16s
[===>----------------------------------------]  10% ETA: 16s
[====>---------------------------------------]  10% ETA: 15s
[====>---------------------------------------]  10% ETA: 16s
[====>---------------------------------------]  10% ETA: 15s
[====>---------------------------------------]  11% ETA: 15s
[====>---------------------------------------]  12% ETA: 15s
[====>---------------------------------------]  12% ETA: 14s
[=====>--------------------------------------]  13% ETA: 14s
[=====>--------------------------------------]  14% ETA: 14s
[=====>--------------------------------------]  15% ETA: 14s
[======>-------------------------------------]  15% ETA: 14s
[======>-------------------------------------]  15% ETA: 13s
[======>-------------------------------------]  16% ETA: 13s
[======>-------------------------------------]  16% ETA: 14s
[======>-------------------------------------]  16% ETA: 13s
[======>-------------------------------------]  17% ETA: 13s
[=======>------------------------------------]  17% ETA: 13s
[=======>------------------------------------]  18% ETA: 13s
[=======>------------------------------------]  19% ETA: 13s
[=======>------------------------------------]  19% ETA: 12s
[========>-----------------------------------]  19% ETA: 13s
[========>-----------------------------------]  20% ETA: 13s
[========>-----------------------------------]  21% ETA: 13s
[========>-----------------------------------]  22% ETA: 13s
[=========>----------------------------------]  22% ETA: 13s
[=========>----------------------------------]  22% ETA: 12s
[=========>----------------------------------]  23% ETA: 12s
[=========>----------------------------------]  24% ETA: 12s
[==========>---------------------------------]  24% ETA: 12s
[==========>---------------------------------]  25% ETA: 12s
[==========>---------------------------------]  26% ETA: 12s
[===========>--------------------------------]  26% ETA: 12s
[===========>--------------------------------]  26% ETA: 11s
[===========>--------------------------------]  27% ETA: 11s
[===========>--------------------------------]  28% ETA: 11s
[============>-------------------------------]  28% ETA: 11s
[============>-------------------------------]  29% ETA: 11s
[============>-------------------------------]  30% ETA: 11s
[============>-------------------------------]  31% ETA: 11s
[=============>------------------------------]  31% ETA: 11s
[=============>------------------------------]  32% ETA: 11s
[=============>------------------------------]  33% ETA: 11s
[=============>------------------------------]  33% ETA: 10s
[==============>-----------------------------]  33% ETA: 10s
[==============>-----------------------------]  34% ETA: 10s
[==============>-----------------------------]  35% ETA: 10s
[===============>----------------------------]  35% ETA: 10s
[===============>----------------------------]  36% ETA: 10s
[===============>----------------------------]  37% ETA: 10s
[================>---------------------------]  38% ETA: 10s
[================>---------------------------]  39% ETA: 10s
[================>---------------------------]  39% ETA:  9s
[================>---------------------------]  40% ETA:  9s
[=================>--------------------------]  40% ETA:  9s
[=================>--------------------------]  41% ETA:  9s
[=================>--------------------------]  42% ETA:  9s
[==================>-------------------------]  42% ETA:  9s
[==================>-------------------------]  43% ETA:  9s
[==================>-------------------------]  44% ETA:  9s
[===================>------------------------]  44% ETA:  9s
[===================>------------------------]  45% ETA:  9s
[===================>------------------------]  46% ETA:  9s
[===================>------------------------]  47% ETA:  9s
[====================>-----------------------]  47% ETA:  9s
[====================>-----------------------]  47% ETA:  8s
[====================>-----------------------]  48% ETA:  8s
[====================>-----------------------]  49% ETA:  8s
[=====================>----------------------]  49% ETA:  8s
[=====================>----------------------]  50% ETA:  8s
[=====================>----------------------]  51% ETA:  8s
[======================>---------------------]  51% ETA:  8s
[======================>---------------------]  52% ETA:  8s
[======================>---------------------]  53% ETA:  8s
[=======================>--------------------]  53% ETA:  8s
[=======================>--------------------]  54% ETA:  8s
[=======================>--------------------]  54% ETA:  7s
[=======================>--------------------]  55% ETA:  7s
[=======================>--------------------]  56% ETA:  7s
[========================>-------------------]  56% ETA:  7s
[========================>-------------------]  57% ETA:  7s
[========================>-------------------]  58% ETA:  7s
[=========================>------------------]  58% ETA:  7s
[=========================>------------------]  59% ETA:  7s
[=========================>------------------]  59% ETA:  6s
[=========================>------------------]  60% ETA:  6s
[==========================>-----------------]  60% ETA:  6s
[==========================>-----------------]  61% ETA:  6s
[==========================>-----------------]  62% ETA:  6s
[===========================>----------------]  63% ETA:  6s
[===========================>----------------]  64% ETA:  6s
[===========================>----------------]  65% ETA:  6s
[============================>---------------]  65% ETA:  6s
[============================>---------------]  65% ETA:  5s
[============================>---------------]  66% ETA:  5s
[============================>---------------]  67% ETA:  5s
[=============================>--------------]  67% ETA:  5s
[=============================>--------------]  68% ETA:  5s
[=============================>--------------]  69% ETA:  5s
[==============================>-------------]  69% ETA:  5s
[==============================>-------------]  70% ETA:  5s
[==============================>-------------]  71% ETA:  5s
[==============================>-------------]  71% ETA:  4s
[==============================>-------------]  72% ETA:  4s
[===============================>------------]  72% ETA:  4s
[===============================>------------]  73% ETA:  4s
[===============================>------------]  74% ETA:  4s
[================================>-----------]  74% ETA:  4s
[================================>-----------]  75% ETA:  4s
[================================>-----------]  76% ETA:  4s
[=================================>----------]  76% ETA:  4s
[=================================>----------]  77% ETA:  4s
[=================================>----------]  77% ETA:  3s
[=================================>----------]  78% ETA:  3s
[=================================>----------]  78% ETA:  4s
[=================================>----------]  78% ETA:  3s
[==================================>---------]  78% ETA:  3s
[==================================>---------]  79% ETA:  3s
[==================================>---------]  80% ETA:  3s
[==================================>---------]  81% ETA:  3s
[===================================>--------]  81% ETA:  3s
[===================================>--------]  82% ETA:  3s
[===================================>--------]  83% ETA:  3s
[====================================>-------]  83% ETA:  3s
[====================================>-------]  84% ETA:  3s
[====================================>-------]  84% ETA:  2s
[====================================>-------]  85% ETA:  2s
[=====================================>------]  85% ETA:  2s
[=====================================>------]  86% ETA:  2s
[=====================================>------]  87% ETA:  2s
[======================================>-----]  88% ETA:  2s
[======================================>-----]  89% ETA:  2s
[======================================>-----]  90% ETA:  2s
[=======================================>----]  90% ETA:  2s
[=======================================>----]  90% ETA:  1s
[=======================================>----]  91% ETA:  1s
[=======================================>----]  92% ETA:  1s
[========================================>---]  92% ETA:  1s
[========================================>---]  93% ETA:  1s
[========================================>---]  94% ETA:  1s
[=========================================>--]  94% ETA:  1s
[=========================================>--]  95% ETA:  1s
[=========================================>--]  96% ETA:  1s
[=========================================>--]  97% ETA:  1s
[==========================================>-]  97% ETA:  1s
[==========================================>-]  97% ETA:  0s
[==========================================>-]  98% ETA:  0s
[==========================================>-]  99% ETA:  0s
[===========================================>]  99% ETA:  0s
[===========================================>] 100% ETA:  0s
plot(sim_v8)

plotlyBiomass(sim_v8)
params_v9@species_params$erepro
 [1] 0.006539088 0.008324580 0.017341896 0.011144187 0.003926176 0.235560686 0.010509550 0.052390073 0.205232541 0.020714097 0.026345845
[12] 0.020721349 0.051218847 0.028016399 0.024934169

kappa <-  resource_params(cm_v1)$kappa
lambda <- resource_params(cm_v1)$lambda
w_max <- 100 
w_full(cm_v1)[[1]]
[1] 8.033057e-13
w_min <- 1e-12

Now we put all these resource parameters into a data frame.

SO_resource_params <-  data.frame(
    resource = c("pl"),
    lambda = c(lambda),
    kappa = c(kappa),
    w_min = c(w_min),
    w_max = c(w_max)
)

SO_resource_params
params_pl_rs <- cm_v1
resource_params(params_pl_rs) <- SO_resource_params
# params_pparams_pl_rsl_rs <- setParams(params_pl_rs)

sim_v_pl_rs <- project(params_pl_rs, effort=0, t_max = 1000)

[>-------------------------------------------]   1% ETA: 14s
[>-------------------------------------------]   2% ETA: 14s
[>-------------------------------------------]   2% ETA: 15s
[>-------------------------------------------]   2% ETA: 14s
[>-------------------------------------------]   2% ETA: 15s
[>-------------------------------------------]   3% ETA: 15s
[>-------------------------------------------]   3% ETA: 14s
[>-------------------------------------------]   3% ETA: 15s
[>-------------------------------------------]   3% ETA: 14s
[=>------------------------------------------]   3% ETA: 14s
[=>------------------------------------------]   4% ETA: 15s
[=>------------------------------------------]   4% ETA: 14s
[=>------------------------------------------]   5% ETA: 14s
[=>------------------------------------------]   5% ETA: 19s
[=>------------------------------------------]   5% ETA: 18s
[=>------------------------------------------]   6% ETA: 18s
[==>-----------------------------------------]   6% ETA: 18s
[==>-----------------------------------------]   6% ETA: 17s
[==>-----------------------------------------]   7% ETA: 17s
[==>-----------------------------------------]   7% ETA: 16s
[==>-----------------------------------------]   8% ETA: 16s
[===>----------------------------------------]   8% ETA: 16s
[===>----------------------------------------]   8% ETA: 15s
[===>----------------------------------------]   9% ETA: 15s
[===>----------------------------------------]  10% ETA: 15s
[===>----------------------------------------]  10% ETA: 14s
[===>----------------------------------------]  10% ETA: 15s
[===>----------------------------------------]  10% ETA: 14s
[====>---------------------------------------]  10% ETA: 14s
[====>---------------------------------------]  11% ETA: 14s
[====>---------------------------------------]  12% ETA: 14s
[=====>--------------------------------------]  13% ETA: 14s
[=====>--------------------------------------]  13% ETA: 13s
[=====>--------------------------------------]  14% ETA: 13s
[=====>--------------------------------------]  15% ETA: 13s
[======>-------------------------------------]  15% ETA: 13s
[======>-------------------------------------]  16% ETA: 12s
[======>-------------------------------------]  16% ETA: 13s
[======>-------------------------------------]  16% ETA: 12s
[======>-------------------------------------]  17% ETA: 12s
[=======>------------------------------------]  17% ETA: 12s
[=======>------------------------------------]  18% ETA: 12s
[=======>------------------------------------]  19% ETA: 12s
[========>-----------------------------------]  19% ETA: 12s
[========>-----------------------------------]  20% ETA: 12s
[========>-----------------------------------]  21% ETA: 11s
[========>-----------------------------------]  22% ETA: 11s
[=========>----------------------------------]  22% ETA: 11s
[=========>----------------------------------]  22% ETA: 12s
[=========>----------------------------------]  23% ETA: 12s
[=========>----------------------------------]  24% ETA: 12s
[==========>---------------------------------]  24% ETA: 12s
[==========>---------------------------------]  24% ETA: 11s
[==========>---------------------------------]  25% ETA: 11s
[==========>---------------------------------]  26% ETA: 11s
[===========>--------------------------------]  26% ETA: 11s
[===========>--------------------------------]  27% ETA: 11s
[===========>--------------------------------]  28% ETA: 11s
[============>-------------------------------]  28% ETA: 11s
[============>-------------------------------]  29% ETA: 11s
[============>-------------------------------]  29% ETA: 10s
[============>-------------------------------]  30% ETA: 10s
[============>-------------------------------]  31% ETA: 10s
[=============>------------------------------]  31% ETA: 10s
[=============>------------------------------]  32% ETA: 10s
[=============>------------------------------]  33% ETA: 10s
[==============>-----------------------------]  33% ETA: 10s
[==============>-----------------------------]  34% ETA: 10s
[==============>-----------------------------]  34% ETA:  9s
[==============>-----------------------------]  35% ETA:  9s
[===============>----------------------------]  35% ETA:  9s
[===============>----------------------------]  36% ETA:  9s
[===============>----------------------------]  37% ETA:  9s
[================>---------------------------]  38% ETA:  9s
[================>---------------------------]  39% ETA:  9s
[================>---------------------------]  40% ETA:  9s
[=================>--------------------------]  40% ETA:  9s
[=================>--------------------------]  41% ETA:  9s
[=================>--------------------------]  41% ETA:  8s
[=================>--------------------------]  42% ETA:  8s
[==================>-------------------------]  42% ETA:  8s
[==================>-------------------------]  43% ETA:  8s
[==================>-------------------------]  44% ETA:  8s
[===================>------------------------]  44% ETA:  8s
[===================>------------------------]  45% ETA:  8s
[===================>------------------------]  46% ETA:  8s
[===================>------------------------]  47% ETA:  8s
[====================>-----------------------]  47% ETA:  8s
[====================>-----------------------]  47% ETA:  7s
[====================>-----------------------]  48% ETA:  7s
[====================>-----------------------]  49% ETA:  7s
[=====================>----------------------]  49% ETA:  7s
[=====================>----------------------]  50% ETA:  7s
[=====================>----------------------]  51% ETA:  7s
[======================>---------------------]  51% ETA:  7s
[======================>---------------------]  52% ETA:  7s
[======================>---------------------]  53% ETA:  7s
[=======================>--------------------]  53% ETA:  7s
[=======================>--------------------]  54% ETA:  7s
[=======================>--------------------]  54% ETA:  6s
[=======================>--------------------]  55% ETA:  6s
[=======================>--------------------]  56% ETA:  6s
[========================>-------------------]  56% ETA:  6s
[========================>-------------------]  57% ETA:  6s
[========================>-------------------]  58% ETA:  6s
[=========================>------------------]  58% ETA:  6s
[=========================>------------------]  59% ETA:  6s
[=========================>------------------]  60% ETA:  6s
[==========================>-----------------]  60% ETA:  6s
[==========================>-----------------]  61% ETA:  6s
[==========================>-----------------]  61% ETA:  5s
[==========================>-----------------]  62% ETA:  5s
[===========================>----------------]  63% ETA:  5s
[===========================>----------------]  64% ETA:  5s
[===========================>----------------]  65% ETA:  5s
[============================>---------------]  65% ETA:  5s
[============================>---------------]  66% ETA:  5s
[============================>---------------]  67% ETA:  5s
[=============================>--------------]  67% ETA:  5s
[=============================>--------------]  68% ETA:  5s
[=============================>--------------]  68% ETA:  4s
[=============================>--------------]  69% ETA:  4s
[==============================>-------------]  69% ETA:  4s
[==============================>-------------]  70% ETA:  4s
[==============================>-------------]  71% ETA:  4s
[==============================>-------------]  72% ETA:  4s
[===============================>------------]  72% ETA:  4s
[===============================>------------]  73% ETA:  4s
[===============================>------------]  74% ETA:  4s
[================================>-----------]  74% ETA:  4s
[================================>-----------]  75% ETA:  4s
[================================>-----------]  75% ETA:  3s
[================================>-----------]  76% ETA:  3s
[=================================>----------]  76% ETA:  3s
[=================================>----------]  77% ETA:  3s
[=================================>----------]  78% ETA:  3s
[==================================>---------]  78% ETA:  3s
[==================================>---------]  79% ETA:  3s
[==================================>---------]  80% ETA:  3s
[==================================>---------]  81% ETA:  3s
[===================================>--------]  81% ETA:  3s
[===================================>--------]  82% ETA:  3s
[===================================>--------]  82% ETA:  2s
[===================================>--------]  83% ETA:  2s
[====================================>-------]  83% ETA:  2s
[====================================>-------]  84% ETA:  2s
[====================================>-------]  85% ETA:  2s
[=====================================>------]  85% ETA:  2s
[=====================================>------]  86% ETA:  2s
[=====================================>------]  87% ETA:  2s
[======================================>-----]  88% ETA:  2s
[======================================>-----]  89% ETA:  2s
[======================================>-----]  89% ETA:  1s
[======================================>-----]  90% ETA:  1s
[=======================================>----]  90% ETA:  1s
[=======================================>----]  91% ETA:  1s
[=======================================>----]  92% ETA:  1s
[========================================>---]  92% ETA:  1s
[========================================>---]  93% ETA:  1s
[========================================>---]  94% ETA:  1s
[=========================================>--]  94% ETA:  1s
[=========================================>--]  95% ETA:  1s
[=========================================>--]  96% ETA:  1s
[=========================================>--]  97% ETA:  0s
[==========================================>-]  97% ETA:  0s
[==========================================>-]  98% ETA:  0s
[==========================================>-]  99% ETA:  0s
[===========================================>]  99% ETA:  0s
[===========================================>] 100% ETA:  0s
plot(sim_v_pl_rs)

mizer::plotDiet(params_pl_rs)

mizer::plotDiet(params_v4)
params <- readRDS("tuned_params.rds")

params <- steady(params)

Check the spectra

plotlySpectra(params, power = 2)
plotBiomassVsSpecies(params)
params <- calibrateBiomass(params)
plotBiomassVsSpecies(params)
plotlySpectra(params)

Rescale species spectra

params <- matchBiomasses(params)
plotBiomassVsSpecies(params)

Can add upper and lower boundaries for observed biomass range

params_v3 <- tuneParams(params)
plotlySpectra(params_v3)

sim <- project(params_v3, effort = 0 , t_max = 500)

plot(sim)
params_v4 <- tuneParams(params_v3)
params_v5 <- tuneGrowth(params_v4)
params_v6 <- tuneParams(params_v5)

# saveRDS(params_v6, "phase1_steady.rds")

Check mizerHowTo Customise the match biomass plots to compare the correct ranges

params <- readRDS("phase1_steady.rds")

Check biomass is at steady-state

sim <- project(params, effort = 0)

plotlyBiomass(sim)
plotlyBiomassObservedVsModel(sim)

Check diets

mizer::plotDiet(params)

try to reduce the maximum size of the background resource to force predation among dynamics groups

params_wpp_v1 <- setParams(params, w_pp_cutoff = 100)

params_wpp_v1 <- setResource(params, w_pp_cutoff = 100)
params_wpp_v2 <- steady(params_wpp_v1)
params_wpp_v3 <- tuneParams(params_wpp_v2)
sim_v2 <- project(params_wpp_v1, t_max = 500)
plot(sim_v2)
mizer::plotDiet(params_wpp_v1)
params_guessed_v2 <- params_guessed

params_guessed_v2@species_params$beta[params_guessed_v2@species_params$species == "orca"]  <- 100

Something like ‘yieldCatch’

params_guessed_v2 <- setParams(params_guessed_v2)

sim_v2 <- project(params_guessed_v2, effort=0)

plot(sim_v2)
plotlyFeedingLevel(sim_v2)
plotlyBiomass(sim_v2)
params_v3 <- setParams(params_guessed_v2, w_pp_cutoff = 100000)

sim_v3 <- project(params_v3, effort=0)

plot(sim_v3)
plotlyFeedingLevel(sim_v3)
plotlyBiomass(sim_v3)
theta_v2 <- theta

theta_v2[6,] # small divers
theta_v2[9,] # leopard seals
theta_v2[13,] # orca

theta_v2[6,c(1:4,7,8)] <- 0.5  # small divers
theta_v2[c(1:4,7,8), 6] <- 0.5
theta_v2[9, c(1:4,7,8)] <- 0.5
theta_v2[c(1:4,7,8), 9] <- 0.5
# theta_v2[13, c(1:4,7,8)] 
# theta_v2[13, c(1:4,7,8)]

theta_v2
params_theta_v2 <- newMultispeciesParams(species_params = species_params, 
                                interaction = theta_v2, 
                                w_pp_cutoff = 100000,
                                n = 3/4, p = 3/4)
box.params_v2 <- params_theta_v2

box.params_v2@species_params$ppmr_min[box.params_v2@species_params$species == "baleen whales"]  <- 1e5
box.params_v2@species_params$ppmr_max[box.params_v2@species_params$species == "baleen whales"] <-5e7
box.params_v2@species_params$pred_kernel_type[box.params_v2@species_params$species == "baleen whales"] <- "box"
params_v2 <- box.params_v2

params_v2@species_params$R_max <-params_v2@resource_params$kappa*params_v2@species_params$w_inf^-1.5

params_v2 <- setParams(params_v2)

sim_v2 <- project(params_v2, effort=0)

plot(sim_v2)
plotlyFeedingLevel(sim_v2)
plotlyBiomass(sim_v2)
# plotDiet(sim_v2)
plotSpectra(sim_v2, power = 2)
params_tuned_v1 <- tuneGrowth(params_guessed)
library(mizerMR)
resource_interaction(params_guessed)
#set vectors of plankton and benthos availability for the model species 
plankton_avail <- c(1, 0.8, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5)
# benthos_avail <- c(0.2, 1, 1, 1, 1, 1, 0.5, 0.5, 0.5, 0.5)

#put them into corresponding columns of resource_interaction matrix
resource_interaction(sim_guessed)[, 1] <- plankton_avail
resource_interaction(cur_model)[, 2] <- benthos_avail
# plotBiomassVsSpecies(params_guessed)

# params_v0 <- calibrateBiomass(params_guessed)
# params_v0 <- matchBiomasses(params_guessed)
# resource_params(params_guessed)
# kappa <-  resource_params(params_guessed)$kappa
# lambda <- resource_params(params_guessed)$lambda
# 
# w_max <- 10
# 
# w_full(params_guessed)[[1]]
# w_min <- 1e-12

Setup apex predator resource

# # Set ap_rss kappa same as plankton kappa 
# kappa_ap <- kappa
# 
# # Assume more shallow slope for benthos 
# lambda_ap <- lambda
# # Set maximum ap prey size
# w_max_ap <- 10000000
# # Set minimum ap prey size
# w_min_ap <- 1000
# # Set benthos kappa same as plankton kappa 
# kappa_ben <- kappa
# # Assume more shallow slope for benthos 
# lambda_ben <- 1.9
# # Set maximum benthos size 
# w_max_ben <- 10
# # Benthos starts at larger sizes, corresponding to about 1-2mm
# w_min_ben <- 0.0001

Now we put all these resource parameters into a data frame.

# MFSO_resource_params <- data.frame(
#     resource = c("pl", "ap"),
#     lambda = c(lambda, lambda_ap),
#     kappa = c(kappa,  kappa_ap),
#     w_min = c(w_min, w_min_ap),
#     w_max = c(w_max,  w_max_ap)
# )
# 
# MFSO_resource_params

We can now update our model to use these resource parameters with

# resource_params(params_guessed) <- MFSO_resource_params
# resource_interaction(params_guessed)
# #set vectors of plankton and benthos availability for the model species 
# plankton_avail <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 0.5, 0.5, 0.25)
# ap_avail <- c(0, 0, 0, 0, 0, 0, 0, 0, 0.25, 0.75, 0.75, 0)
# 
# #put them into corresponding columns of resource_interaction matrix
# resource_interaction(params_guessed)[, 1] <- plankton_avail
# resource_interaction(params_guessed)[, 2] <- ap_avail

Confirm it worked

# resource_interaction(params_guessed)

Try steady for a laugh

MFSO_mod <- steady(params_guessed)

Nah, didn’t think so…hang on a second!

plotlySpectra(MFSO_mod, power = 2)
plotBiomassVsSpecies(MFSO_mod)
MFSO_mod <- calibrateBiomass(MFSO_mod)
plotBiomassVsSpecies(MFSO_mod)
MFSO_mod <- matchBiomasses(MFSO_mod)
plotBiomassVsSpecies(MFSO_mod)
MFSO_mod <- steady(MFSO_mod)
MFSO_mod <- steady(MFSO_mod)
plotBiomassVsSpecies(MFSO_mod)
MFSO_mod <- MFSO_mod |>
    matchBiomasses() |> steady() |> matchBiomasses() |> steady() |>
    matchBiomasses() |> steady() |> matchBiomasses() |> steady() |>
    matchBiomasses() |> steady() |> matchBiomasses() |> steady() |>
    matchBiomasses() |> steady() |> matchBiomasses() |> steady() |>
    matchBiomasses() |> steady() |> matchBiomasses() |> steady()

Increase kappa to help erepro values that are too large. newMultispecies to adjust kappa, or in tuneParams(), but you need to make sure that kappa is actually changing.

plotBiomassVsSpecies(MFSO_mod)
plotSpectra(MFSO_mod, power = 2)
params_v2 <- MFSO_mod

# write_rds(params_v2, "tuned_params.RDS")

params_v2 <- setParams(params_v2)

sim_v2 <- project(params_v2, effort=0)

plot(sim_v2)
plotlySpectra(sim_v2)
# plotDiet(sim_v2)
param_setup <- params_v2
param_setup@resource_params$kappa

param_setup@species_params$R_max[]
param_setup@species_params$erepro[]
params_red_pp_v1 <- param_setup

str(resource_params(params_red_pp_v1))
# mizer::resource_params(params_red_pp_v1)$w_pp_cutoff <- 10

mizer::resource_params(params)[["w_pp_cutoff"]] <- 10
params_red_pp_v1 <- steady(params_red_pp_v1)
MFSO_mod <- matchBiomasses(params_red_pp_v1)
plotBiomassVsSpecies(params_red_pp_v1)
mizerMR::plotlySpectra(param_setup)
mizerMR::plotlySpectra(params_red_pp_v1)
mizerMR::plotDiet(params_red_pp_v1)
params_red_pp_v2 <- setParams(params_red_pp_v1, w_pp_cutoff = 10000)
params_red_pp_v2 <- steady(params_red_pp_v2)
MFSO_mod_v2 <- matchBiomasses(params_red_pp_v2)
plotBiomassVsSpecies(params_red_pp_v2)
mizerMR::plotlySpectra(params_red_pp_v1)
mizerMR::plotlySpectra(params_red_pp_v2)
plotFeedingLevel(params_red_pp_v2, include_critical = T)
mizerMR::plotDiet(params_red_pp_v2)
params_red_pp_v3 <- setParams(params_red_pp_v2, w_pp_cutoff = 1000)
params_red_pp_v3 <- steady(params_red_pp_v3)
MFSO_mod_v3 <- matchBiomasses(params_red_pp_v3)
plotBiomassVsSpecies(params_red_pp_v3)
mizerMR::plotlySpectra(params_red_pp_v2)
mizerMR::plotlySpectra(params_red_pp_v3)
plotFeedingLevel(params_red_pp_v3, include_critical = T)
mizerMR::plotDiet(params_red_pp_v3)
params_red_pp_v4 <- setParams(params_red_pp_v3, w_pp_cutoff = 100)
params_red_pp_v4 <- steady(params_red_pp_v4)
MFSO_mod_v4 <- matchBiomasses(params_red_pp_v4)
plotBiomassVsSpecies(params_red_pp_v4)
mizerMR::plotlySpectra(params_red_pp_v3)
mizerMR::plotlySpectra(params_red_pp_v4)
plotFeedingLevel(params_red_pp_v4, include_critical = T)
mizerMR::plotDiet(params_red_pp_v4)
par_test <- param_setup
# par_test@resource_params$kappa <- 18.3593

# new_vary <- c(param_setup@species_params$R_max, 18.3593)
Rmax_vary <- c(par_test@species_params$R_max)
erepro_vary <- c(par_test@species_params$erepro)
bio_vary <- c(par_test@species_params$R_max, par_test@resource_params$kappa)


getError_Rmax(vary = Rmax_vary, params = par_test, dat = par_test@species_params$biomass_observed, data_type="biomass", timetorun = 100)

getError_erepro(vary = erepro_vary, params = par_test, dat = par_test@species_params$biomass_observed, data_type="biomass", timetorun = 100)

getError_Bio(vary = bio_vary, params = par_test, dat = par_test@species_params$biomass_observed, data_type="biomass", timetorun = 100)
min(param_setup@species_params$R_max[])
max(param_setup@species_params$R_max[])

Optimise

library(parallel)
#create a set of params for the optimisation process
params_optim <- par_test
params_optim <- setParams(params_optim)

#set up workers
noCores <- detectCores() - 2 # keep some spare cores
cl <- makeCluster(noCores, setup_timeout = 0.5)
setDefaultCluster(cl = cl)
clusterExport(cl, as.list(ls()))
clusterEvalQ(cl, {
  library(mizerExperimental)
  library(mizerMR)
  library(optimParallel)
})

optim_result <- optimParallel::optimParallel(par=Rmax_vary,getError_Rmax,params=params_optim, 
                                             dat = params@species_params$biomass_observed, 
                                             data_type="biomass", timetorun = 100, 
                                             method ="L-BFGS-B",
                                             lower=c(rep(1e-20,length(params@species_params$species))),
                                             upper= c(rep(10,length(params@species_params$species))),
                                             parallel=list(loginfo=TRUE, forward=TRUE))
stopCluster(cl)
params_optim@species_params$R_max
# params_optim@species_params$erepro


optim_result$par[1:12]
# optim_result$par[13]
params_optim_v2 <- params_optim
# now put these new Rmaxs
# optim values:
 params_optim_v2@species_params$R_max <- optim_result$par[1:12] # removed the 10^
 # params_optim@species_params$erepro <- optim_result$par[1:12]

 # params_optim@resource_params$kappa <- optim_result$par[13]
 
 # vary_optim <- optim_result$par
 # vary_optim[13] <- 1e3
 # 
 # getErrorBio2(vary = vary_optim,
 #              params_optim, dat = params_optim@species_params$biomass_observed)
 
 #check values ^^ have they gone to max/min etc.
 
params_optim_v2@species_params$max_lim <- 10
params_optim_v2@species_params$min_lim <- 1e-20
# 
params_optim_v2@species_params$R_max > params_optim_v2@species_params$min_lim
params_optim_v2@species_params$R_max < params_optim_v2@species_params$max_lim
 params_optim_v2 <-setParams(params_optim_v2)
 sim_optim <- project(params_optim_v2, effort =0, t_max = 100)

 plot(sim_optim)
 plotlyBiomass(sim_optim)
 plotDiet(sim_optim)

Optimise again

params_optim_v2@resource_params$kappa 
params_optim_v3 <- steady(params_optim_v2)
plotSpectra(params_optim_v3, power =2)
params_optim_v4 <- tuneGrowth(params_optim_v3)
params_optim_v4 <- steady(params_optim_v4)
params_optim_v4 <- readRDS("params_optim_v4.RDS")

sim_v3 <- project(params_optim_v4, effort =0, t_max = 100)
plotBiomassVsSpecies(params_optim_v4)
plotDiet(params_optim_v4)
plotBiomass(sim_v3)
plotlySpectra(sim_v3)
p1 <- plotSpectra(sim_v3)

# saveRDS(params_optim_v4, "params_optim_v4.RDS")
tiff(file="saving_spectra_plot.tiff",
width=6, height=4, units="in", res=500)
p1
dev.off()

If AAD recommend that benthic resource is not meaningful for toothfish

Rmax can be justified by applying a density dependence relationship according to the trait based model (Anderson) If finished with an optim run, could re-introduce density dependence that has been over written by steady()

We don’t know what the level of density dependence should be set at. Can use yield curves, sensitivity to mortality…harvesting

Pristine whale biomass pre-whaling. The ‘base’ model is actually the highly exploited system, can compare historical whaling time series (Chris Clements and Julia have this data)

Body size of whales responding to fishing - Follow

Empricial size distribs of mammals

yield

seaaroundus

We are considering the whales within the Prydz Bay

Gear and catch ability for krill, ice fish and toothfish

Combine Stacey/Roshni model and get a total biomass

params_optim_v4@species_params$erepro
params_optim_v5 <- tuneParams(params_optim_v4)
# params_optim_v5 <- tuneGrowth(params_optim_v4)

getReproductionLevel(params_optim_v4) # no density dependence for groups with 0

# Can try optimise with reproduction level

params_optim_v4@species_params$R_max
params_optim_v4@species_params$erepro

First ecosystem mizer model

# library(parallel)
# #create a set of params for the optimisation process
# # param_optim_v2
# param_optim_v2 <- setParams(param_optim_v2)
# 
# #set up workers
# noCores <- detectCores() - 2 # keep some spare cores
# cl <- makeCluster(noCores, setup_timeout = 0.5)
# setDefaultCluster(cl = cl)
# clusterExport(cl, as.list(ls()))
# clusterEvalQ(cl, {
#   library(mizerExperimental)
#   library(mizerMR)
#   library(optimParallel)
# })
# 
# optim_result <- optimParallel::optimParallel(par=bio_vary,getError_Bio,params=params_optim, 
#                                              dat = params@species_params$biomass_observed, 
#                                              data_type="biomass", timetorun = 100, 
#                                              method ="L-BFGS-B",
#                                              lower=c(rep(1e-20,length(params@species_params$species)),1),
#                                              upper= c(rep(10,length(params@species_params$species)),1e+15),
#                                              parallel=list(loginfo=TRUE, forward=TRUE))
# stopCluster(cl)

Add Benthic Resource Spectrum

# Set benthos kappa same as plankton kappa
kappa_ben <- kappa
# Assume more shallow slope for benthos
lambda_ben <- 1.9
# Set maximum benthos size
w_max_ben <- 10
# Benthos starts at larger sizes, corresponding to about 1-2mm
w_min_ben <- 0.0001

Now we put all these resource parameters into a data frame.

MFSO_resource_params_v2 <- data.frame(
    resource = c("pl", "ap", "bb"),
    lambda = c(lambda, lambda_ap, lambda_ben),
    kappa = c(kappa,  kappa_ap, kappa_ben),
    w_min = c(w_min, w_min_ap, w_min_ben),
    w_max = c(w_max,  w_max_ap, w_max_ben)
)

MFSO_resource_params_v2
params_bb <- params_optim_v4
#set vectors of plankton and benthos availability for the model species 
plankton_avail <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 0.5, 0.5, 0.25)
ap_avail <- c(0, 0, 0, 0, 0, 0, 0, 0, 0.25, 0.75, 0.75, 0)
bb_avail <- c(0.1, 0, 0.25, 0.25, 0, 0.25, 0.25, 0.5, 0.25, 0, 0, 0)


#put them into corresponding columns of resource_interaction matrix
resource_interaction(params_bb)[, 1] <- plankton_avail
resource_interaction(params_bb)[, 2] <- ap_avail
resource_interaction(params_bb)[, 3] <- bb_avail

We can now update our model to use these resource parameters with


params_optim_v5 <- setMultipleResources(params_optim_v4, MFSO_resource_params_v2)

resource_params(params_optim_v4) <- MFSO_resource_params_v2
resource_interaction(params_optim_v4)
#set vectors of plankton and benthos availability for the model species 
plankton_avail <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 0.5, 0.5, 0.25)
ap_avail <- c(0, 0, 0, 0, 0, 0, 0, 0, 0.25, 0.75, 0.75, 0)

#put them into corresponding columns of resource_interaction matrix
resource_interaction(params_guessed)[, 1] <- plankton_avail
resource_interaction(params_guessed)[, 2] <- ap_avail

Confirm it worked

resource_interaction(params_guessed)
LS0tDQp0aXRsZTogIk1GU08gVGlua2VyaW5nIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NClBoYXNlIDENCkthcHBhIHN0YXJ0aW5nIHBvaW50OiB1c2UgdmFsdWUgb2YgMTAgdC9rbV4yIGZyb20gTWNDb3JtYWNrIGV0IGFsLiAyMHh4IHRvIGVzdGFibGlzaCBhIHN0ZWFkeSBtb2RlbC4NCk1hdGNoIG1vZGVsIHRvIHRpbWUtYXZlcmFnZWQgZmlzaGluZyAoY2F0Y2gpDQoNClBoYXNlIDINClRoZW4gdXNlIGhpc3RvcmljYWwgZmlzaE1JUCB2YWx1ZXMgdG8gZXN0aW1hdGUgdGhlIHByb2ZpbGUgb2YgdGhlIHBoeXRvcGxha3RvbiBzaXplIHNwZWN0cnVtDQoNCkFDRUFTIGRhdGE6DQpDYW4gd2UgZ2V0IGVtcGlyaWNhbCBwaHl0b3BsYW5rdG9uIG9yIHpvb3BsYW5rdG9uIHNpemUgc3BlY3RyYSAoQkNHIEFSR08gZmxvYXRzIG9yIHBhcnRpY2xlIGNvdW50ZXJzKSBKYXNlIEV2ZXJldHQgb3IgQUNFQVMgZm9sa3MNCg0KVXNpbmcgcGljbyAoNi45NDU1OWUtMTEpIGFuZCBsYXJnZSAoNi4wNjEzMWUtMDcpICBwaHl0byBtaWRwb2ludHMgZnJvbSBQaG9lYmUncyBtZXRob2QgYXMgdGhlIGFzc3VtZWQgcGh5dG9wbGFua3RvbiBzaXplIHJhbmdlLiAnU3ByZWFkJyB0aGUgYmlvbWFzcyBlc3RpbWF0ZSBmcm9tIE1jQ29ybWFjayBvZiAxMCB0L2ttXjIgYWNyb3NzIHRoYXQgc2l6ZSByYW5nZSBhbmQgdXNpbmcgQmFybmVzIGVxdWF0aW9uIHRvIGVzdGltYXRlIHRoZSBkZW5zaXR5IGF0IHRoZSBpbnRlcmNlcHQgKGRlbnNpdHkgcGVyIGdyYW0gYXQgMCBvbiBsb2cgc2NhbGUpOiBrYXBwYSA9IDE3LjkgDQoNCkthcHBhIGZvciB0aGUgd2hvbGUgbW9kZWwgZG9tYWluIGlzIDE3LjkgKiAxLjQ3NDM0MWUrMTIgPSAyLjYzOTA3ZSsxMw0KDQpTZXR0aW5nIGthcHBhOg0KSG93IGRvIHdlIHdhbnQgdG8gZXhwcmVzcyB0aGUgbW9kZWwgZG9tYWluLiBtXjIgb3IgdGhlIGVudGlyZSBkb21haW4gdm9sdW1lPw0KQmFuemFyZSBCYW5rIG1vZGVsIGRvbWFpbiBpcyAxLjQ3NDM0MWUrMTIgW21eMl0NCg0KRGV0ZXJtaW5lIHRoZSBzaXplIHJhbmdlIGZvciB0aGUgcGh5dG9wbGFua3RvbiBmcm9tIFN0YWNleSdzIG1vZGVsDQotIE1ha2Ugc3VyZSBpdCdzIGRlbnNpdHkgcGVyIA0KDQpDYW4gdXNlIGhpc3RvcmljYWwgZmlzaE1JUCB2YWx1ZXMgdG8gZXN0aW1hdGUgdGhlIGthcHBhIHZhbHVlDQoNCmh0dHBzOi8vZ2l0aHViLmNvbS9wd29vZHdvcnRoLWplZmNvYXRzL3RoZXJNaXplci1GaXNoTUlQLTIwMjItSEkvYmxvYi9tYWluL0NsaW1hdGVGb3JjaW5nL1BsYW5rdG9uL1ByZXBfUGxhbmt0b25fdGhlck1pemVyLlJtZA0KKiBEb3VibGUgY2hlY2sgYWxsIHVuaXRzIHRvIG1ha2Ugc3VyZSB0aGV5IG1hdGNoDQoqIFNpemUgY2xhc3NlcyBoYXJkLWNvZGVkIHNvIG1ha2Ugc3VyZSB0byBlZGl0IA0KKiB0aW1lIHN0ZXBzIGFsc28gaGFyZC1jb2RlZCAobmVlZCB0byBhZGp1c3QgdGhlIGFycmF5cykNCg0KVG8gZ2V0IHRoZSBzdGFydGluZyBwb2ludCBmb3IgUGhvZWJlJ3Mgc2NyaXB0LCBuZWVkIGEgdGltZXNlcmllcyBvZiB0b3RhbCBjYXJib24gZGVuc2l0eQ0KDQpTdGVhZHkgc3RhdGUgaXMgdGhlIGJhc2UgbW9kZWwgKG51bGwgaHlwb3RoZXNpcy4uKSB0aGF0IGZ1bGZpbGxzIHRoZSBmb2xsb3dpbmcgY3JpdGVyaWEuDQpJdCBhbGxvd3MgdXMgdG8gaW52ZXN0aWdhdGUgY2hhbmdlIHJlbGF0aXZlIHRvIHRoZSBiYXNlIG1vZGVsLg0KDQpDbGVhciBydWxlIGZvciB0aGUgbW9kZWwgdG8gcmVwcmVzZW50IGVuZG90aGVybXMNCg0KV2l0aGluIDI1JSBiaW9tYXNzIGVzdGltYXRlcw0KDQpSZWFsaXNlZCBQUE1ScyBhcmUgY29uc2lzdGVudCB3aXRoIGVtcGlyaWNhbCBrbm93bGVkZ2UNCg0KT250b2dlbmV0aWMgc2hpZnRzDQoNClVuZXhwbG9pdGVkIHNpemUgc3BlY3RydW0gdGhhdCBpcyB3aXRoaW4gJ3gnIG9mIHRoZSBleHBlY3RlZCBieSB0aGVvcnkgKGRlZmluaXRlbHkgbmVnYXRpdmUpDQoNClNoZWxkb24gYmlvbWFzcyBkaXN0cmlidXRpb24gPSBhcHByb3guIDANCg0KRW1lcmdlbnQgdmVyc3VzIGNvbnN0cmFpbmVkDQoNClByb2R1Y3Rpb24gdG8gYmlvbWFzcyByYXRpb3MgLSBFY29wYXRoIGVzdGltYXRlcw0KDQp0cm9waGljIGxldmVsIGNvbXBhcmlzb24gd2l0aCBlY29wYXRoIG1vZGVscw0KDQpCb3Jyb3dpbmcgZnJvbSBvdGhlciBtb2RlbHMsIHBpZWNpbmcgdGhlIGV2aWRlbmNlIHRvZ2V0aGVyIHRvIGFsbG93IHVzIHRvIGV4cGxvcmUgdGhlIFMmRiBvZiBlY29zeXN0ZW0gd2l0aCBwbGFua3RvbiB0byB3aGFsZXMuDQoNCktFWSBRVUVTVElPTlM6DQoNCldoYXQgYXJlIHRoZSBlbWVyZ2VudCBlY29zeXN0ZW0gcHJvcGVydGllcywgcHJvZHVjdGl2aXR5LCByZXNpbGllbmNlIGV0YywgDQoNCkhvdyBzZW5zaXRpdmUgYXJlIGVjb3N5c3RlbSBwcm9wZXJ0aWVzIHRvIHBlcnR1cmJhdGlvbiBvZiB1bmNlcnRhaW4gcGFyYW1ldGVycyAobWVzb3BlbGFnaWMgYmlvbWFzcywga2FwcGEgZXRjKQ0KDQoNCkxvYWQgbGlicmFyaWVzIA0KYGBge3J9DQpyZW1vdGVzOjppbnN0YWxsX2dpdGh1Yigic2l6ZXNwZWN0cnVtL21pemVyRXhwZXJpbWVudGFsIikNCmxpYnJhcnkobWl6ZXJFeHBlcmltZW50YWwpDQojIHJlbW90ZXM6Omluc3RhbGxfZ2l0aHViKCJzaXplc3BlY3RydW0vbWl6ZXJNUiIpDQpsaWJyYXJ5KG1pemVyKQ0KIyBsaWJyYXJ5KG1pemVyTVIpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkocGxvdGx5KQ0KIyBsaWJyYXJ5KGxocykNCmBgYA0KDQpMb2FkIGdyb3VwIHBhcmFtZXRlcnMNCg0KYGhgIHZhbHVlcyBmcm9tIGRhdGEgZm9yIHNvbWUgZ3JvdXBzLg0KQ2FuIHRyeSBkZXZlbG9waW5nIGEgbW9kZWwgd2l0aCB0aGVtIGludGl0YWxseSwgYnV0IGl0IG1heSByZXF1aXJlIGRlbGV0aW5nIGFsbCBgaGAgdmFsdWVzIGFuZCBwcm9jZWVkaW5nIGZyb20gdGhlIGJlZ2lubmluZyBhZ2FpbiB3aXRoIGRlZmF1bHQgY2FsdWNsYXRpb25zIGZyb20gbWl6ZXIgdXNpbmcgYGtfdmJgDQoNCmtfdmJfc3RyaW5nIDwtIGMoMC40LDAuMzYwODMzMywwLjE4MjUsMC4xNSwxLDAuMiwwLjUsMC4wNiwwLjIsMC4yLDAuMiwwLjIsMC4yLDAuMiwwLjIpICMgdG8gdXNlIGFsbCBrX3ZiIHZhbHVlcyBhbmQgaW5zdGVhZCBvZiBoDQoNCmBgYHtyfQ0KZ3JvdXBzX3JhdyA8LSByZWFkLmNzdigiZ3JvdXAgcGFyYW1zL3RyYWl0X2dyb3Vwc19wYXJhbXNfdkNXQy5jc3YiKQ0KDQpncm91cHNfbm9faCA8LSBncm91cHNfcmF3WywtN10NCg0KIyBncm91cHNfbm9faCRiaW9tYXNzX29ic2VydmVkDQoNCmdyb3VwcyA8LSBncm91cHNfbm9faA0KDQprX3ZiX3N0cmluZyA8LSBjKDAuNCwwLjM2MDgzMzMsMC4xODI1LDAuMTUsMSwwLjIsMC41LDAuMDYsMC4yLDAuMiwwLjIsMC4yLDAuMiwwLjIsMC4yKSAjIHRvIHVzZSBhbGwga192YiB2YWx1ZXMgYW5kIGluc3RlYWQgb2YgaA0KDQpncm91cHNfcmF3JGtfdmIgPC0ga192Yl9zdHJpbmcNCmdyb3VwcyRrX3ZiIDwtIGtfdmJfc3RyaW5nDQoNCiMgc3BlY2llc19wYXJhbXMgPC0gZ3JvdXBzDQoNCiMgc3BlY2llc19wYXJhbXNbNiw0XSAjbWF4IHNpemUgZm9yIHNtYWxsIGRpdmVycw0KIyBzcGVjaWVzX3BhcmFtc1s2LDNdICNtYXR1cmF0aW9uIHNpemUNCiMgc3BlY2llc19wYXJhbXNbNiwyXSAjbWluaW11bSBzaXplDQojIA0KIyBzcGVjaWVzX3BhcmFtc1s2LDNdIDwtIDAuODUqc3BlY2llc19wYXJhbXNbNiw0XQ0KIyBzcGVjaWVzX3BhcmFtc1s5LDNdIDwtIDAuOTkqc3BlY2llc19wYXJhbXNbOSw0XQ0KIyANCiMgZ3JvdXBzX3Jhd1s2LDNdIDwtIDAuODUqZ3JvdXBzX3Jhd1s2LDRdDQojIGdyb3Vwc19yYXdbOSwzXSA8LSAwLjk5Kmdyb3Vwc19yYXdbOSw0XQ0KZ3JvdXBzDQpgYGANCg0KUnVuIGEgcmFuZ2Ugb2YgbW9kZWxzIHRvIGRpZmZlcmVudCBiaW9tYXNzIGVzdGltYXRlcyANClVzZSBhbiBlbnNlbWJsZSBhcHByb2FjaA0KUGVydHVyYmF0aW9uIHRvIHRlc3QgdGhlIGNoYW5nZSBpbiBzaXplIHN0cnVjdHVyZSBhbmQgZnVuY3Rpb25zDQoNCkxvYWQgaW50ZXJhY3Rpb24gbWF0cml4DQpgYGB7cn0NCnRoZXRhIDwtIHJlYWRSRFMoImludGVyYWN0aW9uIG1hdHJpeC90cmFpdF9ncm91cHNfaW50ZXJhY3Rpb25fbWF0cml4X3ZDV0MuUkRTIikNCnRoZXRhDQpgYGANCg0KYGBge3J9DQp0aGV0YVsxMywxM10NCg0KdGhldGFbMTMsMTNdIDwtIDANCg0KdGhldGFbMTMsMTNdDQpgYGANCg0KU3RhcnRpbmcgd2l0aCBlbXBpcmljYWxseSBkZXJpdmVkIGBoYCB2YWx1ZXMgZm9yIHNvbWUgZ3JvdXBzDQpDcmVhdGUgYHBhcmFtYCBvYmplY3QNCg0KYGBge3J9DQpwYXJhbXNfaF9kZWZhdWx0IDwtIG5ld011bHRpc3BlY2llc1BhcmFtcyhzcGVjaWVzX3BhcmFtcyA9IGdyb3VwcywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aW9uID0gdGhldGEsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYXBwYSA9IDIuNjM5MDdlKzEzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3X3BwX2N1dG9mZiA9IDEwMDAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMy80LCBwID0gMy80KQ0KDQojIHBhcmFtcyA8LSBuZXdNdWx0aXNwZWNpZXNQYXJhbXMoc3BlY2llc19wYXJhbXMgPSBncm91cHNfcmF3LA0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aW9uID0gdGhldGEsDQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd19wcF9jdXRvZmYgPSAxLA0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAzLzQsIHAgPSAzLzQpDQoNCmdldF9oX2RlZmF1bHQocGFyYW1zX2hfZGVmYXVsdCkNCiMgZ2V0X2hfZGVmYXVsdChwYXJhbXMpDQoNCiMgcGFyYW1zX2hfZGVmYXVsdEBzcGVjaWVzX3BhcmFtcyRoIC0gcGFyYW1zQHNwZWNpZXNfcGFyYW1zJGgNCmBgYA0KDQpgYGB7cn0NCmJveC5wYXJhbXMgPC0gcGFyYW1zX2hfZGVmYXVsdA0KDQpib3gucGFyYW1zQHNwZWNpZXNfcGFyYW1zJHBwbXJfbWluW2JveC5wYXJhbXNAc3BlY2llc19wYXJhbXMkc3BlY2llcyA9PSAiYmFsZWVuIHdoYWxlcyJdICA8LSAxZTUNCmJveC5wYXJhbXNAc3BlY2llc19wYXJhbXMkcHBtcl9tYXhbYm94LnBhcmFtc0BzcGVjaWVzX3BhcmFtcyRzcGVjaWVzID09ICJiYWxlZW4gd2hhbGVzIl0gPC01ZTcNCmJveC5wYXJhbXNAc3BlY2llc19wYXJhbXMkcHJlZF9rZXJuZWxfdHlwZVtib3gucGFyYW1zQHNwZWNpZXNfcGFyYW1zJHNwZWNpZXMgPT0gImJhbGVlbiB3aGFsZXMiXSA8LSAiYm94Ig0KYGBgDQoNCg0KYGBge3J9DQpwYXJhbXNfdjEgPC0gYm94LnBhcmFtcw0KDQpwYXJhbXNfdjFAc3BlY2llc19wYXJhbXMkd19tYXRbcGFyYW1zX3YxQHNwZWNpZXNfcGFyYW1zJHNwZWNpZXMgPT0gImxlb3BhcmQgc2VhbHMiXSAgPC0gMy40ODAwMDBlKzA1ICogMC45DQpwYXJhbXNfdjFAc3BlY2llc19wYXJhbXMkd19tYXRbcGFyYW1zX3YxQHNwZWNpZXNfcGFyYW1zJHNwZWNpZXMgPT0gImxhcmdlIGRpdmVycyJdICA8LSAyLjAyNDAwMGUrMDYgKiAwLjkNCnBhcmFtc192MUBzcGVjaWVzX3BhcmFtcyR3X21hdFtwYXJhbXNfdjFAc3BlY2llc19wYXJhbXMkc3BlY2llcyA9PSAibWlua2Ugd2hhbGVzIl0gIDwtIDYuMDAwMDAwZSswNiAqIDAuOQ0KcGFyYW1zX3YxQHNwZWNpZXNfcGFyYW1zJHdfbWF0W3BhcmFtc192MUBzcGVjaWVzX3BhcmFtcyRzcGVjaWVzID09ICJzcGVybSB3aGFsZXMiXSAgPC0gMy42NTAwMDBlKzA3ICogMC45DQoNCnBhcmFtc192MSA8LSBzZXRQYXJhbXMocGFyYW1zX3YxKQ0KYGBgDQoNCg0KYGBge3J9DQpwYXJhbXNfdjIgPC0gcGFyYW1zX3YxDQoNCnBhcmFtc192MkBzcGVjaWVzX3BhcmFtcyR3X21pbltwYXJhbXNfdjJAc3BlY2llc19wYXJhbXMkc3BlY2llcyA9PSAic21hbGwgZGl2ZXJzIl0gIDwtIHBhcmFtc192MkBzcGVjaWVzX3BhcmFtcyR3X21hdFtwYXJhbXNfdjJAc3BlY2llc19wYXJhbXMkc3BlY2llcyA9PSAic21hbGwgZGl2ZXJzIl0gKiAwLjg1DQpwYXJhbXNfdjJAc3BlY2llc19wYXJhbXMkd19taW5bcGFyYW1zX3YyQHNwZWNpZXNfcGFyYW1zJHNwZWNpZXMgPT0gImxlb3BhcmQgc2VhbHMiXSAgPC0gcGFyYW1zX3YyQHNwZWNpZXNfcGFyYW1zJHdfbWF0W3BhcmFtc192MkBzcGVjaWVzX3BhcmFtcyRzcGVjaWVzID09ICJsZW9wYXJkIHNlYWxzIl0gKiAwLjg1DQoNCnBhcmFtc192MiA8LSBzZXRQYXJhbXMocGFyYW1zX3YyKQ0KYGBgDQoNCkZpcnN0IHNpbXVsYXRpb24gdXNpbmcgcmF3IHBhcmFtIHZhbHVlcw0KTmVlZCB0byBhZGp1c3Qgc3RhcnRpbmcgUm1heCB2YWx1ZXMuIFVzZSBKdWxpYSdzIHF1aWNrIGNhbGlicmF0aW9uIHVzaW5nIGthcHBhIChhbHRob3VnaCBzdGFydGluZyBrYXBwYSBpcyBhIHRvdGFsIGd1ZXNzIGFzIHdlbGwpDQoNCg0KDQpgYGB7cn0NCnBhcmFtc19ndWVzc2VkIDwtIHBhcmFtc192Mg0KDQpwYXJhbXNfZ3Vlc3NlZEBzcGVjaWVzX3BhcmFtcyRSX21heCA8LSBwYXJhbXNfZ3Vlc3NlZEByZXNvdXJjZV9wYXJhbXMka2FwcGEqcGFyYW1zX2d1ZXNzZWRAc3BlY2llc19wYXJhbXMkd19tYXheLTEuNQ0KDQpwYXJhbXNfZ3Vlc3NlZCA8LSBzZXRQYXJhbXMocGFyYW1zX2d1ZXNzZWQpDQoNCnNpbV9ndWVzc2VkIDwtIHByb2plY3QocGFyYW1zX2d1ZXNzZWQsIGVmZm9ydD0wKQ0KDQpwbG90KHNpbV9ndWVzc2VkKQ0KcGxvdGx5RmVlZGluZ0xldmVsKHNpbV9ndWVzc2VkKQ0KcGxvdGx5QmlvbWFzcyhzaW1fZ3Vlc3NlZCkNCiMgcGxvdERpZXQoc2ltX2d1ZXNzZWQpDQpwbG90U3BlY3RyYShzaW1fZ3Vlc3NlZCkNCmBgYA0KQXBleCBwcmVkYXRvcnMgaGF2ZSB0aGUgbW9zdCBkaXZlcnNlIGRpZXQgYW5kIGFyZSBvbmx5IHByZXlpbmcgdXBvbiBkeW5hbWljIGdyb3Vwcy4gSG93ZXZlciwgdGhpcyBtZWFucyB0aGV5IGRvbid0IGhhdmUgZW5vdWdoIHRvIGVhdC4gV2UgY2FuIGVpdGhlciBvcGVuIHVwIHJlc291cmNlcyBhdmFpbGFibGUgdG8gdGhlbSwgYWx0aG91Z2ggdGhlIGVtcGlyaWNhbCBvYnNlcnZhdGlvbnMgc3VnZ2VzdCB0aGF0IHRoZXkgc2hvdWxkIGJlIGVhdGluZyB0aGUgbGFyZ2VyIGludmlkdWFscyBvZiBncm91cHMgbGlrZSBkaXZlcnMuIFNvLCBpbnN0ZWFkIG9mIGluY3JlYXNpbmcgYGJldGFgIG9yIGluY3JlYXNpbmcgdGhlIHdpZHRoIG9mIHRoZWlyIGZlZWRpbmcga2VybmVsLCB3ZSB3aWxsIHRyeSB0byBhZGQgYSBuZXcgcmVzb3VyY2Ugc3BlY3RydW0gdGhhdCBvbmx5IGFwZXggcHJlZGF0b3JzIGNhbiBhY2Nlc3MgdG8gYWlkIHRoZWlyIGdyb3d0aCBhbmQgcmVwcm9kdWN0aW9uLiBJZiB3ZSBjYW4gcmVhY2ggYSBzdGVhZHkgc3RhdGUgaW4gdGhpcyBmYXNoaW9uLCB0aGVuIHdlIGNhbiByZW1vdmUgdGhlIGFkZGl0aW9uYWwgcmVzb3VyY2Ugd2l0aCBmdXJ0aGVyIGNhbGlicmF0aW9uIGVmZm9ydHMuDQoNCg0KYGBge3J9DQpwbG90RGlldChwYXJhbXNfZ3Vlc3NlZCwgc3BlY2llcyA9ICJiYWxlZW4gd2hhbGVzIikNCnBsb3REaWV0KHBhcmFtc19ndWVzc2VkLCBzcGVjaWVzID0gIm9yY2EiKQ0KDQpgYGANCg0KYGBge3J9DQpwYXJhbXNfZ3Vlc3NlZEBzcGVjaWVzX3BhcmFtcyRzcGVjaWVzDQpwYXJhbXNfZ3Vlc3NlZEBzcGVjaWVzX3BhcmFtcyRSX21heA0KDQoNCnBhcmFtc192MSA8LSBwYXJhbXNfZ3Vlc3NlZA0KDQojIHBhcmFtc192MUBzcGVjaWVzX3BhcmFtcyRSX21heFtwYXJhbXNfdjFAc3BlY2llc19wYXJhbXMkc3BlY2llcyA9PSAib3JjYSJdIDwtIEluZg0KcGFyYW1zX3YxQHNwZWNpZXNfcGFyYW1zJGdhbW1hW3BhcmFtc192MUBzcGVjaWVzX3BhcmFtcyRzcGVjaWVzID09ICJvcmNhIl0gPC0gcGFyYW1zX3YxQHNwZWNpZXNfcGFyYW1zJGdhbW1hW3BhcmFtc192MUBzcGVjaWVzX3BhcmFtcyRzcGVjaWVzID09ICJvcmNhIl0gKiA1MA0KDQpgYGANCg0KDQpgYGB7cn0NCnBhcmFtc192MSA8LSBzZXRQYXJhbXMocGFyYW1zX3YxKQ0KDQpzaW1fZ3Vlc3NlZCA8LSBwcm9qZWN0KHBhcmFtc192MSwgZWZmb3J0PTAsIHRfbWF4ID0gMTAwMCkNCg0KcGxvdChzaW1fZ3Vlc3NlZCkNCmBgYA0KDQoNClJlZmluZSBib3ggZmVlZGluZyBrZXJuZWwgZm9yIHRoZSBiYWxlZW4gd2hhbGVzDQptYXggcHBtciB2YWx1ZSBhcmUgYmFzZWQgb24gd19tYXggYmFsZWVuIHdoYWxlIGZlZWRpbmcgb24gd19taW4gZXVwaGF1c2lpZHMNCm1pbiBwcG1yIHZhbHVlIGJhc2VkIG9uIHdfbWluIGJhbGVlbiB3aGFsZSBmZWVkaW5nIG9uIHdfbWF4IGV1cGhhdXNpaWRzDQoNCmBgYHtyfQ0KcGFyYW1zX3YyIDwtIHBhcmFtc192MQ0KDQpwYXJhbXNfdjJAc3BlY2llc19wYXJhbXMkd19taW5bcGFyYW1zX3YyQHNwZWNpZXNfcGFyYW1zJHNwZWNpZXMgPT0gImJhbGVlbiB3aGFsZXMiXQ0KcGFyYW1zX3YyQHNwZWNpZXNfcGFyYW1zJHdfbWF4W3BhcmFtc192MkBzcGVjaWVzX3BhcmFtcyRzcGVjaWVzID09ICJiYWxlZW4gd2hhbGVzIl0NCg0KcGFyYW1zX3YyQHNwZWNpZXNfcGFyYW1zJHdfbWluW3BhcmFtc192MkBzcGVjaWVzX3BhcmFtcyRzcGVjaWVzID09ICJldXBoYXVzaWlkcyJdDQpwYXJhbXNfdjJAc3BlY2llc19wYXJhbXMkd19tYXhbcGFyYW1zX3YyQHNwZWNpZXNfcGFyYW1zJHNwZWNpZXMgPT0gImV1cGhhdXNpaWRzIl0NCmBgYA0KDQoNCg0KYGBge3J9DQojIDEuMDNlKzA4LzYuMzFlLTA1ICMgd19tYXggYmFsZWVuIHdoYWxlIGRpdmlkZWQgYnkgd19taW4gZXVwaGF1c2lpZHMNCiMgMjI1MDAwMC8zLjE2MjI3OCAjIHdfbWluIGJhbGVlbiB3aGFsZSBkaXZpZGVkIGJ5IHdfbWF4IGV1cGhhdXNpaWRzDQoNCnBhcmFtc192MkBzcGVjaWVzX3BhcmFtcyRwcG1yX21pbltwYXJhbXNfdjJAc3BlY2llc19wYXJhbXMkc3BlY2llcyA9PSAiYmFsZWVuIHdoYWxlcyJdICA8LSA3MTE1MTIuNA0KcGFyYW1zX3YyQHNwZWNpZXNfcGFyYW1zJHBwbXJfbWF4W3BhcmFtc192MkBzcGVjaWVzX3BhcmFtcyRzcGVjaWVzID09ICJiYWxlZW4gd2hhbGVzIl0gPC0gMS42MzIzM2UrMTINCg0KIyBwYXJhbXNfdjJAc3BlY2llc19wYXJhbXMkcHBtcl9taW5bcGFyYW1zX3YyQHNwZWNpZXNfcGFyYW1zJHNwZWNpZXMgPT0gImJhbGVlbiB3aGFsZXMiXSAgPC0gMWU1DQojIHBhcmFtc192MkBzcGVjaWVzX3BhcmFtcyRwcG1yX21heFtwYXJhbXNfdjJAc3BlY2llc19wYXJhbXMkc3BlY2llcyA9PSAiYmFsZWVuIHdoYWxlcyJdIDwtNWU3DQpwYXJhbXNfdjJAc3BlY2llc19wYXJhbXMkcHJlZF9rZXJuZWxfdHlwZVtwYXJhbXNfdjJAc3BlY2llc19wYXJhbXMkc3BlY2llcyA9PSAiYmFsZWVuIHdoYWxlcyJdIDwtICJib3giDQoNCmBgYA0KDQoNCmBgYHtyfQ0KcGFyYW1zX3YyIDwtIHNldFBhcmFtcyhwYXJhbXNfdjIpDQoNCnNpbV92MiA8LSBwcm9qZWN0KHBhcmFtc192MiwgZWZmb3J0PTAsIHRfbWF4ID0gMTAwMCkNCg0KcGxvdChzaW1fdjIpDQpgYGANCg0KYGBge3J9DQptaXplcjo6cGxvdERpZXQocGFyYW1zX3YyKQ0KYGBgDQpgYGB7cn0NCiMgc2F2ZVJEUyhwYXJhbXNfdjIsICJzdGFnZTFfc3RlYWR5LnJkcyIpICNzdGFnZSAxIGlzIHdpdGggYmFsZWVuIHdoYWxlIGJveCBrZXJuZWwsIGFkanVzdGVkIG1hdHVyYXRpb24gc2l6ZXMgZm9yIG1vc3QgbWFyaW5lIG1hbW1hbHMgYW5kIGEgYmFja2dyb3VuZCByZXNvdXJjZSB3aXRoIGEgbGFyZ2UgbWF4IHNpemUNCmBgYA0KDQpOb3cgSSB3aWxsIHRyeSB0byByZWR1Y2UgdGhlIG1heCBzaXplIG9mIHRoZSByZXNvdXJjZQ0KYGBge3J9DQpwYXJhbXNfdjMgPC0gcGFyYW1zX3YyDQoNCnBhcmFtc192M0ByZXNvdXJjZV9wYXJhbXMkd19wcF9jdXRvZmYgIyBzdGFydGVkIHdpdGggMTAwMDANCg0KcGFyYW1zX3YzQHJlc291cmNlX3BhcmFtcyR3X3BwX2N1dG9mZiAgPC0gMTAwDQpgYGANCg0KDQpgYGB7cn0NCnBhcmFtc192MyA8LSBzZXRQYXJhbXMocGFyYW1zX3YzKQ0KDQpzaW1fdjMgPC0gcHJvamVjdChwYXJhbXNfdjMsIGVmZm9ydD0wLCB0X21heCA9IDEwMDApDQoNCnBsb3Qoc2ltX3YzKQ0KYGBgDQpgYGB7cn0NCm1pemVyOjpwbG90RGlldChwYXJhbXNfdjMpDQpgYGANCg0KYGBge3J9DQpwYXJhbXNfdjNfc3RlYWR5IDwtIHN0ZWFkeShwYXJhbXNfdjMpDQpwYXJhbXNfdjNfdHVuZWQgPC0gdHVuZVBhcmFtcyhwYXJhbXNfdjNfc3RlYWR5KQ0KYGBgDQoNCg0KYGBge3J9DQpwYXJhbXNfdjNfdHVuZWRAc3BlY2llc19wYXJhbXMkZXJlcHJvDQpwYXJhbXNfdjNfdHVuZWRAc3BlY2llc19wYXJhbXMkd19tYXQNCnBhcmFtc192M190dW5lZEBzcGVjaWVzX3BhcmFtcyR3X21hdDI1DQpwYXJhbXNfdjNfdHVuZWRAcmVzb3VyY2VfcGFyYW1zJHdfcHBfY3V0b2ZmDQpgYGANCg0KYGBge3J9DQptaXplcjo6cGxvdERpZXQocGFyYW1zX3YzX3R1bmVkKQ0KYGBgDQoNCmBgYHtyfQ0KcGFyYW1zX3Y0IDwtIHR1bmVHcm93dGgocGFyYW1zX3YzX3R1bmVkKQ0KDQpzaW1fdjQgPC0gcHJvamVjdChwYXJhbXNfdjQsIGVmZm9ydD0wLCB0X21heCA9IDEwMDApDQoNCnBsb3Qoc2ltX3Y0KQ0KcGxvdGx5QmlvbWFzcyhzaW1fdjQpDQpgYGANCg0KDQpgYGB7cn0NCnBhcmFtc192NSA8LSB0dW5lR3Jvd3RoKHBhcmFtc192NCkNCg0Kc2ltX3Y1IDwtIHByb2plY3QocGFyYW1zX3Y1LCBlZmZvcnQ9MCwgdF9tYXggPSAxMDAwKQ0KDQpwbG90KHNpbV92NSkNCnBsb3RseUJpb21hc3Moc2ltX3Y1KQ0KYGBgDQoNCg0KDQpgYGB7cn0NCnBhcmFtc192NV9zdGVhZHkgPC0gc3RlYWR5KHBhcmFtc192NSkNCnBhcmFtc192NV90dW5lZCA8LSB0dW5lUGFyYW1zKHBhcmFtc192NV9zdGVhZHkpDQpgYGANCg0KDQpgYGB7cn0NCiMgcGFyYW1zX3Y2IDwtIHNldFBhcmFtcyhwYXJhbXNfdjVfdHVuZWQpDQoNCnNpbV92NiA8LSBwcm9qZWN0KHBhcmFtc192NV90dW5lZCwgZWZmb3J0PTAsIHRfbWF4ID0gMjAwMCkNCg0KcGxvdChzaW1fdjYpDQpwbG90bHlCaW9tYXNzKHNpbV92NikNCmBgYA0KDQoNCg0KYGBge3J9DQpwYXJhbXNfdjYgPC0gc3RlYWR5KHBhcmFtc192NV90dW5lZCkNCg0KcGxvdEJpb21hc3NWc1NwZWNpZXMocGFyYW1zX3Y2KQ0KcGxvdGx5U3BlY3RyYShwYXJhbXNfdjYsIHBvd2VyID0gMikNCg0KcGFyYW1zX3Y2IDwtIGNhbGlicmF0ZUJpb21hc3MocGFyYW1zX3Y2KQ0KcGxvdEJpb21hc3NWc1NwZWNpZXMocGFyYW1zX3Y2KQ0KYGBgDQoNCmBgYHtyfQ0KcGFyYW1zX3Y3IDwtIHBhcmFtc192NiB8Pg0KICAgIG1hdGNoQmlvbWFzc2VzKCkgfD4gc3RlYWR5KCkgfD4gbWF0Y2hCaW9tYXNzZXMoKSB8PiBzdGVhZHkoKSB8Pg0KICAgIG1hdGNoQmlvbWFzc2VzKCkgfD4gc3RlYWR5KCkgfD4gbWF0Y2hCaW9tYXNzZXMoKSB8PiBzdGVhZHkoKSB8Pg0KICAgIG1hdGNoQmlvbWFzc2VzKCkgfD4gc3RlYWR5KCkgfD4gbWF0Y2hCaW9tYXNzZXMoKSB8PiBzdGVhZHkoKSB8Pg0KICAgIG1hdGNoQmlvbWFzc2VzKCkgfD4gc3RlYWR5KCkgfD4gbWF0Y2hCaW9tYXNzZXMoKSB8PiBzdGVhZHkoKSB8Pg0KICAgIG1hdGNoQmlvbWFzc2VzKCkgfD4gc3RlYWR5KCkgfD4gbWF0Y2hCaW9tYXNzZXMoKSB8PiBzdGVhZHkoKQ0KYGBgDQpgYGB7cn0NCnNpbV92NyA8LSBwcm9qZWN0KHBhcmFtc192NywgZWZmb3J0PTAsIHRfbWF4ID0gMTAwMCkNCg0KcGxvdChzaW1fdjcpDQpwbG90bHlCaW9tYXNzKHNpbV92NykNCm1pemVyOjpwbG90RGlldChwYXJhbXNfdjcpDQpgYGANCg0KYGBge3J9DQpwYXJhbXNfdjggPC0gdHVuZUdyb3d0aChwYXJhbXNfdjcpDQpgYGANCg0KDQoNCmBgYHtyfQ0KcGFyYW1zX3Y5IDwtIHN0ZWFkeShwYXJhbXNfdjgsIHRfbWF4ID0gMTAwMCkNCmBgYA0KDQoNCmBgYHtyfQ0Kc2ltX3Y4IDwtIHByb2plY3QocGFyYW1zX3Y5LCBlZmZvcnQ9MCwgdF9tYXggPSAxMDAwKQ0KDQpwbG90KHNpbV92OCkNCnBsb3RseUJpb21hc3Moc2ltX3Y4KQ0KcGFyYW1zX3Y5QHNwZWNpZXNfcGFyYW1zJGVyZXBybw0KYGBgDQoNCg0KDQoNCmBgYHtyfQ0KcGFyYW1zX3Y5QHNwZWNpZXNfcGFyYW1zJGVyZXBybw0KDQpjbSA8LSBwYXJhbXNfdjkNCmNtIDwtIHNldEJldmVydG9uSG9sdChjbSwgZXJlcHJvID0gYygwLjAwNjUzOTA4OCwgMC4wMDgzMjQ1ODAsIDAuMDE3MzQxODk2LCAwLjAxMTE0NDE4NywgMC4wMDM5MjYxNzYsIDAuMjM1NTYwNjg2LCAwLjAxMDUwOTU1MCwgMC4wNTIzOTAwNzMsIDAuMjA1MjMyNTQxLCAwLjIsIDAuMiwgMC4yLCAwLjIsIDAuMiwgMC4yKSkNCnNwZWNpZXNfcGFyYW1zKGNtKSB8PiBzZWxlY3QoZXJlcHJvLCBSX21heCkNCg0KY21fdjEgPC0gc3RlYWR5KGNtKQ0KYGBgDQoNCmBgYHtyfQ0Kc2ltX2NtX3YxIDwtIHByb2plY3QoY21fdjEsIGVmZm9ydD0wLCB0X21heCA9IDIwMDApDQoNCnBsb3Qoc2ltX2NtX3YxKQ0KcGxvdGx5QmlvbWFzcyhzaW1fY21fdjEpDQpwbG90bHlTcGVjdHJhKHNpbV9jbV92MSwgcG93ZXI9MSkNCmBgYA0KDQpgYGB7cn0NCg0KYGBgDQoNCg0KDQpgYGB7cn0NCmthcHBhIDwtICByZXNvdXJjZV9wYXJhbXMoY21fdjEpJGthcHBhDQpsYW1iZGEgPC0gcmVzb3VyY2VfcGFyYW1zKGNtX3YxKSRsYW1iZGENCndfbWF4IDwtIDEwMCANCndfZnVsbChjbV92MSlbWzFdXQ0Kd19taW4gPC0gMWUtMTINCmBgYA0KDQoNCg0KDQpOb3cgd2UgcHV0IGFsbCB0aGVzZSByZXNvdXJjZSBwYXJhbWV0ZXJzIGludG8gYSBkYXRhIGZyYW1lLg0KDQpgYGB7cn0NClNPX3Jlc291cmNlX3BhcmFtcyA8LSAgZGF0YS5mcmFtZSgNCiAgICByZXNvdXJjZSA9IGMoInBsIiksDQogICAgbGFtYmRhID0gYyhsYW1iZGEpLA0KICAgIGthcHBhID0gYyhrYXBwYSksDQogICAgd19taW4gPSBjKHdfbWluKSwNCiAgICB3X21heCA9IGMod19tYXgpDQopDQoNClNPX3Jlc291cmNlX3BhcmFtcw0KYGBgDQoNCg0KYGBge3J9DQpwYXJhbXNfcGxfcnMgPC0gY21fdjENCnJlc291cmNlX3BhcmFtcyhwYXJhbXNfcGxfcnMpIDwtIFNPX3Jlc291cmNlX3BhcmFtcw0KYGBgDQoNCg0KYGBge3J9DQojIHBhcmFtc19wcGFyYW1zX3BsX3JzbF9ycyA8LSBzZXRQYXJhbXMocGFyYW1zX3BsX3JzKQ0KDQpzaW1fdl9wbF9ycyA8LSBwcm9qZWN0KHBhcmFtc19wbF9ycywgZWZmb3J0PTAsIHRfbWF4ID0gMTAwMCkNCg0KcGxvdChzaW1fdl9wbF9ycykNCm1pemVyOjpwbG90RGlldChwYXJhbXNfcGxfcnMpDQpgYGANCg0KYGBge3J9DQptaXplcjo6cGxvdERpZXQocGFyYW1zX3Y0KQ0KYGBgDQoNCg0KYGBge3J9DQpwYXJhbXMgPC0gcmVhZFJEUygidHVuZWRfcGFyYW1zLnJkcyIpDQoNCnBhcmFtcyA8LSBzdGVhZHkocGFyYW1zKQ0KDQpgYGANCg0KQ2hlY2sgdGhlIHNwZWN0cmENCmBgYHtyfQ0KcGxvdGx5U3BlY3RyYShwYXJhbXMsIHBvd2VyID0gMikNCmBgYA0KDQpgYGB7cn0NCnBsb3RCaW9tYXNzVnNTcGVjaWVzKHBhcmFtcykNCmBgYA0KYGBge3J9DQpwYXJhbXMgPC0gY2FsaWJyYXRlQmlvbWFzcyhwYXJhbXMpDQpwbG90QmlvbWFzc1ZzU3BlY2llcyhwYXJhbXMpDQpwbG90bHlTcGVjdHJhKHBhcmFtcykNCmBgYA0KUmVzY2FsZSBzcGVjaWVzIHNwZWN0cmENCmBgYHtyfQ0KcGFyYW1zIDwtIG1hdGNoQmlvbWFzc2VzKHBhcmFtcykNCnBsb3RCaW9tYXNzVnNTcGVjaWVzKHBhcmFtcykNCmBgYA0KQ2FuIGFkZCB1cHBlciBhbmQgbG93ZXIgYm91bmRhcmllcyBmb3Igb2JzZXJ2ZWQgYmlvbWFzcyByYW5nZQ0KYGBge3J9DQpwYXJhbXNfdjMgPC0gdHVuZVBhcmFtcyhwYXJhbXMpDQpgYGANCg0KDQpgYGB7cn0NCnBsb3RseVNwZWN0cmEocGFyYW1zX3YzKQ0KDQpzaW0gPC0gcHJvamVjdChwYXJhbXNfdjMsIGVmZm9ydCA9IDAgLCB0X21heCA9IDUwMCkNCg0KcGxvdChzaW0pDQpgYGANCg0KYGBge3J9DQpwYXJhbXNfdjQgPC0gdHVuZVBhcmFtcyhwYXJhbXNfdjMpDQpwYXJhbXNfdjUgPC0gdHVuZUdyb3d0aChwYXJhbXNfdjQpDQpwYXJhbXNfdjYgPC0gdHVuZVBhcmFtcyhwYXJhbXNfdjUpDQoNCiMgc2F2ZVJEUyhwYXJhbXNfdjYsICJwaGFzZTFfc3RlYWR5LnJkcyIpDQpgYGANCg0KQ2hlY2sgbWl6ZXJIb3dUbw0KQ3VzdG9taXNlIHRoZSBtYXRjaCBiaW9tYXNzIHBsb3RzIHRvIGNvbXBhcmUgdGhlIGNvcnJlY3QgcmFuZ2VzDQoNCmBgYHtyfQ0KcGFyYW1zIDwtIHJlYWRSRFMoInBoYXNlMV9zdGVhZHkucmRzIikNCmBgYA0KDQpDaGVjayBiaW9tYXNzIGlzIGF0IHN0ZWFkeS1zdGF0ZQ0KYGBge3J9DQpzaW0gPC0gcHJvamVjdChwYXJhbXMsIGVmZm9ydCA9IDApDQoNCnBsb3RseUJpb21hc3Moc2ltKQ0KcGxvdGx5QmlvbWFzc09ic2VydmVkVnNNb2RlbChzaW0pDQpgYGANCg0KQ2hlY2sgZGlldHMNCmBgYHtyfQ0KbWl6ZXI6OnBsb3REaWV0KHBhcmFtcykNCmBgYA0KdHJ5IHRvIHJlZHVjZSB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBiYWNrZ3JvdW5kIHJlc291cmNlIHRvIGZvcmNlIHByZWRhdGlvbiBhbW9uZyBkeW5hbWljcyBncm91cHMNCmBgYHtyfQ0KcGFyYW1zX3dwcF92MSA8LSBzZXRQYXJhbXMocGFyYW1zLCB3X3BwX2N1dG9mZiA9IDEwMCkNCg0KcGFyYW1zX3dwcF92MSA8LSBzZXRSZXNvdXJjZShwYXJhbXMsIHdfcHBfY3V0b2ZmID0gMTAwKQ0KYGBgDQoNCg0KYGBge3J9DQpwYXJhbXNfd3BwX3YyIDwtIHN0ZWFkeShwYXJhbXNfd3BwX3YxKQ0KYGBgDQoNCmBgYHtyfQ0KcGFyYW1zX3dwcF92MyA8LSB0dW5lUGFyYW1zKHBhcmFtc193cHBfdjIpDQpgYGANCg0KDQpgYGB7cn0NCnNpbV92MiA8LSBwcm9qZWN0KHBhcmFtc193cHBfdjEsIHRfbWF4ID0gNTAwKQ0KcGxvdChzaW1fdjIpDQpgYGANCmBgYHtyfQ0KbWl6ZXI6OnBsb3REaWV0KHBhcmFtc193cHBfdjEpDQpgYGANCg0KDQpgYGB7cn0NCnBhcmFtc19ndWVzc2VkX3YyIDwtIHBhcmFtc19ndWVzc2VkDQoNCnBhcmFtc19ndWVzc2VkX3YyQHNwZWNpZXNfcGFyYW1zJGJldGFbcGFyYW1zX2d1ZXNzZWRfdjJAc3BlY2llc19wYXJhbXMkc3BlY2llcyA9PSAib3JjYSJdICA8LSAxMDANCmBgYA0KDQpTb21ldGhpbmcgbGlrZSAneWllbGRDYXRjaCcNCg0KYGBge3J9DQpwYXJhbXNfZ3Vlc3NlZF92MiA8LSBzZXRQYXJhbXMocGFyYW1zX2d1ZXNzZWRfdjIpDQoNCnNpbV92MiA8LSBwcm9qZWN0KHBhcmFtc19ndWVzc2VkX3YyLCBlZmZvcnQ9MCkNCg0KcGxvdChzaW1fdjIpDQpwbG90bHlGZWVkaW5nTGV2ZWwoc2ltX3YyKQ0KcGxvdGx5QmlvbWFzcyhzaW1fdjIpDQpgYGANCg0KDQpgYGB7cn0NCnBhcmFtc192MyA8LSBzZXRQYXJhbXMocGFyYW1zX2d1ZXNzZWRfdjIsIHdfcHBfY3V0b2ZmID0gMTAwMDAwKQ0KDQpzaW1fdjMgPC0gcHJvamVjdChwYXJhbXNfdjMsIGVmZm9ydD0wKQ0KDQpwbG90KHNpbV92MykNCnBsb3RseUZlZWRpbmdMZXZlbChzaW1fdjMpDQpwbG90bHlCaW9tYXNzKHNpbV92MykNCmBgYA0KDQoNCmBgYHtyfQ0KdGhldGFfdjIgPC0gdGhldGENCg0KdGhldGFfdjJbNixdICMgc21hbGwgZGl2ZXJzDQp0aGV0YV92Mls5LF0gIyBsZW9wYXJkIHNlYWxzDQp0aGV0YV92MlsxMyxdICMgb3JjYQ0KDQp0aGV0YV92Mls2LGMoMTo0LDcsOCldIDwtIDAuNSAgIyBzbWFsbCBkaXZlcnMNCnRoZXRhX3YyW2MoMTo0LDcsOCksIDZdIDwtIDAuNQ0KdGhldGFfdjJbOSwgYygxOjQsNyw4KV0gPC0gMC41DQp0aGV0YV92MltjKDE6NCw3LDgpLCA5XSA8LSAwLjUNCiMgdGhldGFfdjJbMTMsIGMoMTo0LDcsOCldIA0KIyB0aGV0YV92MlsxMywgYygxOjQsNyw4KV0NCg0KdGhldGFfdjINCmBgYA0KDQpgYGB7cn0NCnBhcmFtc190aGV0YV92MiA8LSBuZXdNdWx0aXNwZWNpZXNQYXJhbXMoc3BlY2llc19wYXJhbXMgPSBzcGVjaWVzX3BhcmFtcywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aW9uID0gdGhldGFfdjIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3X3BwX2N1dG9mZiA9IDEwMDAwMCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDMvNCwgcCA9IDMvNCkNCg0KYGBgDQoNCmBgYHtyfQ0KYm94LnBhcmFtc192MiA8LSBwYXJhbXNfdGhldGFfdjINCg0KYm94LnBhcmFtc192MkBzcGVjaWVzX3BhcmFtcyRwcG1yX21pbltib3gucGFyYW1zX3YyQHNwZWNpZXNfcGFyYW1zJHNwZWNpZXMgPT0gImJhbGVlbiB3aGFsZXMiXSAgPC0gMWU1DQpib3gucGFyYW1zX3YyQHNwZWNpZXNfcGFyYW1zJHBwbXJfbWF4W2JveC5wYXJhbXNfdjJAc3BlY2llc19wYXJhbXMkc3BlY2llcyA9PSAiYmFsZWVuIHdoYWxlcyJdIDwtNWU3DQpib3gucGFyYW1zX3YyQHNwZWNpZXNfcGFyYW1zJHByZWRfa2VybmVsX3R5cGVbYm94LnBhcmFtc192MkBzcGVjaWVzX3BhcmFtcyRzcGVjaWVzID09ICJiYWxlZW4gd2hhbGVzIl0gPC0gImJveCINCmBgYA0KDQoNCmBgYHtyfQ0KcGFyYW1zX3YyIDwtIGJveC5wYXJhbXNfdjINCg0KcGFyYW1zX3YyQHNwZWNpZXNfcGFyYW1zJFJfbWF4IDwtcGFyYW1zX3YyQHJlc291cmNlX3BhcmFtcyRrYXBwYSpwYXJhbXNfdjJAc3BlY2llc19wYXJhbXMkd19pbmZeLTEuNQ0KDQpwYXJhbXNfdjIgPC0gc2V0UGFyYW1zKHBhcmFtc192MikNCg0Kc2ltX3YyIDwtIHByb2plY3QocGFyYW1zX3YyLCBlZmZvcnQ9MCkNCg0KcGxvdChzaW1fdjIpDQpwbG90bHlGZWVkaW5nTGV2ZWwoc2ltX3YyKQ0KcGxvdGx5QmlvbWFzcyhzaW1fdjIpDQojIHBsb3REaWV0KHNpbV92MikNCmBgYA0KDQpgYGB7cn0NCnBsb3RTcGVjdHJhKHNpbV92MiwgcG93ZXIgPSAyKQ0KYGBgDQoNCg0KYGBge3J9DQpwYXJhbXNfdHVuZWRfdjEgPC0gdHVuZUdyb3d0aChwYXJhbXNfZ3Vlc3NlZCkNCmBgYA0KDQoNCg0KYGBge3J9DQpsaWJyYXJ5KG1pemVyTVIpDQpyZXNvdXJjZV9pbnRlcmFjdGlvbihwYXJhbXNfZ3Vlc3NlZCkNCiNzZXQgdmVjdG9ycyBvZiBwbGFua3RvbiBhbmQgYmVudGhvcyBhdmFpbGFiaWxpdHkgZm9yIHRoZSBtb2RlbCBzcGVjaWVzIA0KcGxhbmt0b25fYXZhaWwgPC0gYygxLCAwLjgsIDAuNSwgMC41LCAwLjUsIDAuNSwgMC41LCAwLjUsIDAuNSwgMC41KQ0KIyBiZW50aG9zX2F2YWlsIDwtIGMoMC4yLCAxLCAxLCAxLCAxLCAxLCAwLjUsIDAuNSwgMC41LCAwLjUpDQoNCiNwdXQgdGhlbSBpbnRvIGNvcnJlc3BvbmRpbmcgY29sdW1ucyBvZiByZXNvdXJjZV9pbnRlcmFjdGlvbiBtYXRyaXgNCnJlc291cmNlX2ludGVyYWN0aW9uKHNpbV9ndWVzc2VkKVssIDFdIDwtIHBsYW5rdG9uX2F2YWlsDQpyZXNvdXJjZV9pbnRlcmFjdGlvbihjdXJfbW9kZWwpWywgMl0gPC0gYmVudGhvc19hdmFpbA0KYGBgDQoNCg0KDQpgYGB7cn0NCiMgcGxvdEJpb21hc3NWc1NwZWNpZXMocGFyYW1zX2d1ZXNzZWQpDQoNCiMgcGFyYW1zX3YwIDwtIGNhbGlicmF0ZUJpb21hc3MocGFyYW1zX2d1ZXNzZWQpDQojIHBhcmFtc192MCA8LSBtYXRjaEJpb21hc3NlcyhwYXJhbXNfZ3Vlc3NlZCkNCg0KYGBgDQoNCg0KDQpgYGB7cn0NCiMgcmVzb3VyY2VfcGFyYW1zKHBhcmFtc19ndWVzc2VkKQ0KYGBgDQoNCmBgYHtyfQ0KIyBrYXBwYSA8LSAgcmVzb3VyY2VfcGFyYW1zKHBhcmFtc19ndWVzc2VkKSRrYXBwYQ0KIyBsYW1iZGEgPC0gcmVzb3VyY2VfcGFyYW1zKHBhcmFtc19ndWVzc2VkKSRsYW1iZGENCiMgDQojIHdfbWF4IDwtIDEwDQojIA0KIyB3X2Z1bGwocGFyYW1zX2d1ZXNzZWQpW1sxXV0NCmBgYA0KDQpgYGB7cn0NCiMgd19taW4gPC0gMWUtMTINCmBgYA0KDQoNCg0KDQpTZXR1cCBhcGV4IHByZWRhdG9yIHJlc291cmNlDQpgYGB7cn0NCiMgIyBTZXQgYXBfcnNzIGthcHBhIHNhbWUgYXMgcGxhbmt0b24ga2FwcGEgDQojIGthcHBhX2FwIDwtIGthcHBhDQojIA0KIyAjIEFzc3VtZSBtb3JlIHNoYWxsb3cgc2xvcGUgZm9yIGJlbnRob3MgDQojIGxhbWJkYV9hcCA8LSBsYW1iZGENCiMgIyBTZXQgbWF4aW11bSBhcCBwcmV5IHNpemUNCiMgd19tYXhfYXAgPC0gMTAwMDAwMDANCiMgIyBTZXQgbWluaW11bSBhcCBwcmV5IHNpemUNCiMgd19taW5fYXAgPC0gMTAwMA0KYGBgDQoNCg0KYGBge3J9DQojICMgU2V0IGJlbnRob3Mga2FwcGEgc2FtZSBhcyBwbGFua3RvbiBrYXBwYSANCiMga2FwcGFfYmVuIDwtIGthcHBhDQojICMgQXNzdW1lIG1vcmUgc2hhbGxvdyBzbG9wZSBmb3IgYmVudGhvcyANCiMgbGFtYmRhX2JlbiA8LSAxLjkNCiMgIyBTZXQgbWF4aW11bSBiZW50aG9zIHNpemUgDQojIHdfbWF4X2JlbiA8LSAxMA0KIyAjIEJlbnRob3Mgc3RhcnRzIGF0IGxhcmdlciBzaXplcywgY29ycmVzcG9uZGluZyB0byBhYm91dCAxLTJtbQ0KIyB3X21pbl9iZW4gPC0gMC4wMDAxDQpgYGANCg0KDQoNCk5vdyB3ZSBwdXQgYWxsIHRoZXNlIHJlc291cmNlIHBhcmFtZXRlcnMgaW50byBhIGRhdGEgZnJhbWUuDQoNCmBgYHtyfQ0KIyBNRlNPX3Jlc291cmNlX3BhcmFtcyA8LSBkYXRhLmZyYW1lKA0KIyAgICAgcmVzb3VyY2UgPSBjKCJwbCIsICJhcCIpLA0KIyAgICAgbGFtYmRhID0gYyhsYW1iZGEsIGxhbWJkYV9hcCksDQojICAgICBrYXBwYSA9IGMoa2FwcGEsICBrYXBwYV9hcCksDQojICAgICB3X21pbiA9IGMod19taW4sIHdfbWluX2FwKSwNCiMgICAgIHdfbWF4ID0gYyh3X21heCwgIHdfbWF4X2FwKQ0KIyApDQojIA0KIyBNRlNPX3Jlc291cmNlX3BhcmFtcw0KYGBgDQoNCldlIGNhbiBub3cgdXBkYXRlIG91ciBtb2RlbCB0byB1c2UgdGhlc2UgcmVzb3VyY2UgcGFyYW1ldGVycyB3aXRoDQoNCmBgYHtyfQ0KIyByZXNvdXJjZV9wYXJhbXMocGFyYW1zX2d1ZXNzZWQpIDwtIE1GU09fcmVzb3VyY2VfcGFyYW1zDQpgYGANCg0KDQpgYGB7cn0NCiMgcmVzb3VyY2VfaW50ZXJhY3Rpb24ocGFyYW1zX2d1ZXNzZWQpDQpgYGANCg0KDQoNCmBgYHtyfQ0KIyAjc2V0IHZlY3RvcnMgb2YgcGxhbmt0b24gYW5kIGJlbnRob3MgYXZhaWxhYmlsaXR5IGZvciB0aGUgbW9kZWwgc3BlY2llcyANCiMgcGxhbmt0b25fYXZhaWwgPC0gYygxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjUsIDAuNSwgMC4yNSkNCiMgYXBfYXZhaWwgPC0gYygwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLjI1LCAwLjc1LCAwLjc1LCAwKQ0KIyANCiMgI3B1dCB0aGVtIGludG8gY29ycmVzcG9uZGluZyBjb2x1bW5zIG9mIHJlc291cmNlX2ludGVyYWN0aW9uIG1hdHJpeA0KIyByZXNvdXJjZV9pbnRlcmFjdGlvbihwYXJhbXNfZ3Vlc3NlZClbLCAxXSA8LSBwbGFua3Rvbl9hdmFpbA0KIyByZXNvdXJjZV9pbnRlcmFjdGlvbihwYXJhbXNfZ3Vlc3NlZClbLCAyXSA8LSBhcF9hdmFpbA0KYGBgDQoNCkNvbmZpcm0gaXQgd29ya2VkDQpgYGB7cn0NCiMgcmVzb3VyY2VfaW50ZXJhY3Rpb24ocGFyYW1zX2d1ZXNzZWQpDQpgYGANCg0KVHJ5IGBzdGVhZHlgIGZvciBhIGxhdWdoDQpgYGB7cn0NCk1GU09fbW9kIDwtIHN0ZWFkeShwYXJhbXNfZ3Vlc3NlZCkNCmBgYA0KDQpOYWgsIGRpZG4ndCB0aGluayBzby4uLmhhbmcgb24gYSBzZWNvbmQhIA0KDQpgYGB7cn0NCnBsb3RseVNwZWN0cmEoTUZTT19tb2QsIHBvd2VyID0gMikNCmBgYA0KDQpgYGB7cn0NCnBsb3RCaW9tYXNzVnNTcGVjaWVzKE1GU09fbW9kKQ0KYGBgDQoNCmBgYHtyfQ0KTUZTT19tb2QgPC0gY2FsaWJyYXRlQmlvbWFzcyhNRlNPX21vZCkNCnBsb3RCaW9tYXNzVnNTcGVjaWVzKE1GU09fbW9kKQ0KYGBgDQoNCmBgYHtyfQ0KTUZTT19tb2QgPC0gbWF0Y2hCaW9tYXNzZXMoTUZTT19tb2QpDQpwbG90QmlvbWFzc1ZzU3BlY2llcyhNRlNPX21vZCkNCmBgYA0KDQpgYGB7cn0NCk1GU09fbW9kIDwtIHN0ZWFkeShNRlNPX21vZCkNCmBgYA0KDQpgYGB7cn0NCk1GU09fbW9kIDwtIHN0ZWFkeShNRlNPX21vZCkNCnBsb3RCaW9tYXNzVnNTcGVjaWVzKE1GU09fbW9kKQ0KYGBgDQoNCmBgYHtyfQ0KTUZTT19tb2QgPC0gTUZTT19tb2QgfD4NCiAgICBtYXRjaEJpb21hc3NlcygpIHw+IHN0ZWFkeSgpIHw+IG1hdGNoQmlvbWFzc2VzKCkgfD4gc3RlYWR5KCkgfD4NCiAgICBtYXRjaEJpb21hc3NlcygpIHw+IHN0ZWFkeSgpIHw+IG1hdGNoQmlvbWFzc2VzKCkgfD4gc3RlYWR5KCkgfD4NCiAgICBtYXRjaEJpb21hc3NlcygpIHw+IHN0ZWFkeSgpIHw+IG1hdGNoQmlvbWFzc2VzKCkgfD4gc3RlYWR5KCkgfD4NCiAgICBtYXRjaEJpb21hc3NlcygpIHw+IHN0ZWFkeSgpIHw+IG1hdGNoQmlvbWFzc2VzKCkgfD4gc3RlYWR5KCkgfD4NCiAgICBtYXRjaEJpb21hc3NlcygpIHw+IHN0ZWFkeSgpIHw+IG1hdGNoQmlvbWFzc2VzKCkgfD4gc3RlYWR5KCkNCmBgYA0KDQpJbmNyZWFzZSBrYXBwYSB0byBoZWxwIGVyZXBybyB2YWx1ZXMgdGhhdCBhcmUgdG9vIGxhcmdlLg0KbmV3TXVsdGlzcGVjaWVzIHRvIGFkanVzdCBrYXBwYSwgb3IgaW4gdHVuZVBhcmFtcygpLCBidXQgeW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQga2FwcGEgaXMgYWN0dWFsbHkgY2hhbmdpbmcuDQoNCmBgYHtyfQ0KcGxvdEJpb21hc3NWc1NwZWNpZXMoTUZTT19tb2QpDQpwbG90U3BlY3RyYShNRlNPX21vZCwgcG93ZXIgPSAyKQ0KYGBgDQoNCg0KYGBge3J9DQpwYXJhbXNfdjIgPC0gTUZTT19tb2QNCg0KIyB3cml0ZV9yZHMocGFyYW1zX3YyLCAidHVuZWRfcGFyYW1zLlJEUyIpDQoNCnBhcmFtc192MiA8LSBzZXRQYXJhbXMocGFyYW1zX3YyKQ0KDQpzaW1fdjIgPC0gcHJvamVjdChwYXJhbXNfdjIsIGVmZm9ydD0wKQ0KDQpwbG90KHNpbV92MikNCnBsb3RseVNwZWN0cmEoc2ltX3YyKQ0KIyBwbG90RGlldChzaW1fdjIpDQpgYGANCg0KDQpgYGB7cn0NCnBhcmFtX3NldHVwIDwtIHBhcmFtc192Mg0KcGFyYW1fc2V0dXBAcmVzb3VyY2VfcGFyYW1zJGthcHBhDQoNCnBhcmFtX3NldHVwQHNwZWNpZXNfcGFyYW1zJFJfbWF4W10NCnBhcmFtX3NldHVwQHNwZWNpZXNfcGFyYW1zJGVyZXByb1tdDQpgYGANCg0KYGBge3J9DQpwYXJhbXNfcmVkX3BwX3YxIDwtIHBhcmFtX3NldHVwDQoNCnN0cihyZXNvdXJjZV9wYXJhbXMocGFyYW1zX3JlZF9wcF92MSkpDQojIG1pemVyOjpyZXNvdXJjZV9wYXJhbXMocGFyYW1zX3JlZF9wcF92MSkkd19wcF9jdXRvZmYgPC0gMTANCg0KbWl6ZXI6OnJlc291cmNlX3BhcmFtcyhwYXJhbXMpW1sid19wcF9jdXRvZmYiXV0gPC0gMTANCg0KYGBgDQoNCmBgYHtyfQ0KcGFyYW1zX3JlZF9wcF92MSA8LSBzdGVhZHkocGFyYW1zX3JlZF9wcF92MSkNCmBgYA0KDQpgYGB7cn0NCk1GU09fbW9kIDwtIG1hdGNoQmlvbWFzc2VzKHBhcmFtc19yZWRfcHBfdjEpDQpwbG90QmlvbWFzc1ZzU3BlY2llcyhwYXJhbXNfcmVkX3BwX3YxKQ0KbWl6ZXJNUjo6cGxvdGx5U3BlY3RyYShwYXJhbV9zZXR1cCkNCm1pemVyTVI6OnBsb3RseVNwZWN0cmEocGFyYW1zX3JlZF9wcF92MSkNCm1pemVyTVI6OnBsb3REaWV0KHBhcmFtc19yZWRfcHBfdjEpDQpgYGANCg0KDQpgYGB7cn0NCnBhcmFtc19yZWRfcHBfdjIgPC0gc2V0UGFyYW1zKHBhcmFtc19yZWRfcHBfdjEsIHdfcHBfY3V0b2ZmID0gMTAwMDApDQpgYGANCg0KYGBge3J9DQpwYXJhbXNfcmVkX3BwX3YyIDwtIHN0ZWFkeShwYXJhbXNfcmVkX3BwX3YyKQ0KYGBgDQoNCg0KYGBge3J9DQpNRlNPX21vZF92MiA8LSBtYXRjaEJpb21hc3NlcyhwYXJhbXNfcmVkX3BwX3YyKQ0KcGxvdEJpb21hc3NWc1NwZWNpZXMocGFyYW1zX3JlZF9wcF92MikNCm1pemVyTVI6OnBsb3RseVNwZWN0cmEocGFyYW1zX3JlZF9wcF92MSkNCm1pemVyTVI6OnBsb3RseVNwZWN0cmEocGFyYW1zX3JlZF9wcF92MikNCnBsb3RGZWVkaW5nTGV2ZWwocGFyYW1zX3JlZF9wcF92MiwgaW5jbHVkZV9jcml0aWNhbCA9IFQpDQptaXplck1SOjpwbG90RGlldChwYXJhbXNfcmVkX3BwX3YyKQ0KYGBgDQoNCmBgYHtyfQ0KcGFyYW1zX3JlZF9wcF92MyA8LSBzZXRQYXJhbXMocGFyYW1zX3JlZF9wcF92Miwgd19wcF9jdXRvZmYgPSAxMDAwKQ0KYGBgDQoNCmBgYHtyfQ0KcGFyYW1zX3JlZF9wcF92MyA8LSBzdGVhZHkocGFyYW1zX3JlZF9wcF92MykNCmBgYA0KDQpgYGB7cn0NCk1GU09fbW9kX3YzIDwtIG1hdGNoQmlvbWFzc2VzKHBhcmFtc19yZWRfcHBfdjMpDQpwbG90QmlvbWFzc1ZzU3BlY2llcyhwYXJhbXNfcmVkX3BwX3YzKQ0KbWl6ZXJNUjo6cGxvdGx5U3BlY3RyYShwYXJhbXNfcmVkX3BwX3YyKQ0KbWl6ZXJNUjo6cGxvdGx5U3BlY3RyYShwYXJhbXNfcmVkX3BwX3YzKQ0KcGxvdEZlZWRpbmdMZXZlbChwYXJhbXNfcmVkX3BwX3YzLCBpbmNsdWRlX2NyaXRpY2FsID0gVCkNCm1pemVyTVI6OnBsb3REaWV0KHBhcmFtc19yZWRfcHBfdjMpDQpgYGANCg0KDQpgYGB7cn0NCnBhcmFtc19yZWRfcHBfdjQgPC0gc2V0UGFyYW1zKHBhcmFtc19yZWRfcHBfdjMsIHdfcHBfY3V0b2ZmID0gMTAwKQ0KYGBgDQoNCmBgYHtyfQ0KcGFyYW1zX3JlZF9wcF92NCA8LSBzdGVhZHkocGFyYW1zX3JlZF9wcF92NCkNCmBgYA0KDQpgYGB7cn0NCk1GU09fbW9kX3Y0IDwtIG1hdGNoQmlvbWFzc2VzKHBhcmFtc19yZWRfcHBfdjQpDQpwbG90QmlvbWFzc1ZzU3BlY2llcyhwYXJhbXNfcmVkX3BwX3Y0KQ0KbWl6ZXJNUjo6cGxvdGx5U3BlY3RyYShwYXJhbXNfcmVkX3BwX3YzKQ0KbWl6ZXJNUjo6cGxvdGx5U3BlY3RyYShwYXJhbXNfcmVkX3BwX3Y0KQ0KcGxvdEZlZWRpbmdMZXZlbChwYXJhbXNfcmVkX3BwX3Y0LCBpbmNsdWRlX2NyaXRpY2FsID0gVCkNCm1pemVyTVI6OnBsb3REaWV0KHBhcmFtc19yZWRfcHBfdjQpDQpgYGANCg0KYGBge3J9DQpwYXJfdGVzdCA8LSBwYXJhbV9zZXR1cA0KIyBwYXJfdGVzdEByZXNvdXJjZV9wYXJhbXMka2FwcGEgPC0gMTguMzU5Mw0KDQojIG5ld192YXJ5IDwtIGMocGFyYW1fc2V0dXBAc3BlY2llc19wYXJhbXMkUl9tYXgsIDE4LjM1OTMpDQpSbWF4X3ZhcnkgPC0gYyhwYXJfdGVzdEBzcGVjaWVzX3BhcmFtcyRSX21heCkNCmVyZXByb192YXJ5IDwtIGMocGFyX3Rlc3RAc3BlY2llc19wYXJhbXMkZXJlcHJvKQ0KYmlvX3ZhcnkgPC0gYyhwYXJfdGVzdEBzcGVjaWVzX3BhcmFtcyRSX21heCwgcGFyX3Rlc3RAcmVzb3VyY2VfcGFyYW1zJGthcHBhKQ0KDQoNCmdldEVycm9yX1JtYXgodmFyeSA9IFJtYXhfdmFyeSwgcGFyYW1zID0gcGFyX3Rlc3QsIGRhdCA9IHBhcl90ZXN0QHNwZWNpZXNfcGFyYW1zJGJpb21hc3Nfb2JzZXJ2ZWQsIGRhdGFfdHlwZT0iYmlvbWFzcyIsIHRpbWV0b3J1biA9IDEwMCkNCg0KZ2V0RXJyb3JfZXJlcHJvKHZhcnkgPSBlcmVwcm9fdmFyeSwgcGFyYW1zID0gcGFyX3Rlc3QsIGRhdCA9IHBhcl90ZXN0QHNwZWNpZXNfcGFyYW1zJGJpb21hc3Nfb2JzZXJ2ZWQsIGRhdGFfdHlwZT0iYmlvbWFzcyIsIHRpbWV0b3J1biA9IDEwMCkNCg0KZ2V0RXJyb3JfQmlvKHZhcnkgPSBiaW9fdmFyeSwgcGFyYW1zID0gcGFyX3Rlc3QsIGRhdCA9IHBhcl90ZXN0QHNwZWNpZXNfcGFyYW1zJGJpb21hc3Nfb2JzZXJ2ZWQsIGRhdGFfdHlwZT0iYmlvbWFzcyIsIHRpbWV0b3J1biA9IDEwMCkNCmBgYA0KDQpgYGB7cn0NCm1pbihwYXJhbV9zZXR1cEBzcGVjaWVzX3BhcmFtcyRSX21heFtdKQ0KbWF4KHBhcmFtX3NldHVwQHNwZWNpZXNfcGFyYW1zJFJfbWF4W10pDQpgYGANCg0KDQpPcHRpbWlzZQ0KDQpgYGB7cn0NCmxpYnJhcnkocGFyYWxsZWwpDQojY3JlYXRlIGEgc2V0IG9mIHBhcmFtcyBmb3IgdGhlIG9wdGltaXNhdGlvbiBwcm9jZXNzDQpwYXJhbXNfb3B0aW0gPC0gcGFyX3Rlc3QNCnBhcmFtc19vcHRpbSA8LSBzZXRQYXJhbXMocGFyYW1zX29wdGltKQ0KDQojc2V0IHVwIHdvcmtlcnMNCm5vQ29yZXMgPC0gZGV0ZWN0Q29yZXMoKSAtIDIgIyBrZWVwIHNvbWUgc3BhcmUgY29yZXMNCmNsIDwtIG1ha2VDbHVzdGVyKG5vQ29yZXMsIHNldHVwX3RpbWVvdXQgPSAwLjUpDQpzZXREZWZhdWx0Q2x1c3RlcihjbCA9IGNsKQ0KY2x1c3RlckV4cG9ydChjbCwgYXMubGlzdChscygpKSkNCmNsdXN0ZXJFdmFsUShjbCwgew0KICBsaWJyYXJ5KG1pemVyRXhwZXJpbWVudGFsKQ0KICBsaWJyYXJ5KG1pemVyTVIpDQogIGxpYnJhcnkob3B0aW1QYXJhbGxlbCkNCn0pDQoNCm9wdGltX3Jlc3VsdCA8LSBvcHRpbVBhcmFsbGVsOjpvcHRpbVBhcmFsbGVsKHBhcj1SbWF4X3ZhcnksZ2V0RXJyb3JfUm1heCxwYXJhbXM9cGFyYW1zX29wdGltLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdCA9IHBhcmFtc0BzcGVjaWVzX3BhcmFtcyRiaW9tYXNzX29ic2VydmVkLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdHlwZT0iYmlvbWFzcyIsIHRpbWV0b3J1biA9IDEwMCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSJMLUJGR1MtQiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dlcj1jKHJlcCgxZS0yMCxsZW5ndGgocGFyYW1zQHNwZWNpZXNfcGFyYW1zJHNwZWNpZXMpKSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHBlcj0gYyhyZXAoMTAsbGVuZ3RoKHBhcmFtc0BzcGVjaWVzX3BhcmFtcyRzcGVjaWVzKSkpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWxsZWw9bGlzdChsb2dpbmZvPVRSVUUsIGZvcndhcmQ9VFJVRSkpDQpzdG9wQ2x1c3RlcihjbCkNCg0KDQpgYGANCg0KYGBge3J9DQpwYXJhbXNfb3B0aW1Ac3BlY2llc19wYXJhbXMkUl9tYXgNCiMgcGFyYW1zX29wdGltQHNwZWNpZXNfcGFyYW1zJGVyZXBybw0KDQoNCm9wdGltX3Jlc3VsdCRwYXJbMToxMl0NCiMgb3B0aW1fcmVzdWx0JHBhclsxM10NCmBgYA0KDQpgYGB7cn0NCnBhcmFtc19vcHRpbV92MiA8LSBwYXJhbXNfb3B0aW0NCiMgbm93IHB1dCB0aGVzZSBuZXcgUm1heHMNCiMgb3B0aW0gdmFsdWVzOg0KIHBhcmFtc19vcHRpbV92MkBzcGVjaWVzX3BhcmFtcyRSX21heCA8LSBvcHRpbV9yZXN1bHQkcGFyWzE6MTJdICMgcmVtb3ZlZCB0aGUgMTBeDQogIyBwYXJhbXNfb3B0aW1Ac3BlY2llc19wYXJhbXMkZXJlcHJvIDwtIG9wdGltX3Jlc3VsdCRwYXJbMToxMl0NCg0KICMgcGFyYW1zX29wdGltQHJlc291cmNlX3BhcmFtcyRrYXBwYSA8LSBvcHRpbV9yZXN1bHQkcGFyWzEzXQ0KIA0KICMgdmFyeV9vcHRpbSA8LSBvcHRpbV9yZXN1bHQkcGFyDQogIyB2YXJ5X29wdGltWzEzXSA8LSAxZTMNCiAjIA0KICMgZ2V0RXJyb3JCaW8yKHZhcnkgPSB2YXJ5X29wdGltLA0KICMgICAgICAgICAgICAgIHBhcmFtc19vcHRpbSwgZGF0ID0gcGFyYW1zX29wdGltQHNwZWNpZXNfcGFyYW1zJGJpb21hc3Nfb2JzZXJ2ZWQpDQogDQogI2NoZWNrIHZhbHVlcyBeXiBoYXZlIHRoZXkgZ29uZSB0byBtYXgvbWluIGV0Yy4NCiANCnBhcmFtc19vcHRpbV92MkBzcGVjaWVzX3BhcmFtcyRtYXhfbGltIDwtIDEwDQpwYXJhbXNfb3B0aW1fdjJAc3BlY2llc19wYXJhbXMkbWluX2xpbSA8LSAxZS0yMA0KIyANCnBhcmFtc19vcHRpbV92MkBzcGVjaWVzX3BhcmFtcyRSX21heCA+IHBhcmFtc19vcHRpbV92MkBzcGVjaWVzX3BhcmFtcyRtaW5fbGltDQpwYXJhbXNfb3B0aW1fdjJAc3BlY2llc19wYXJhbXMkUl9tYXggPCBwYXJhbXNfb3B0aW1fdjJAc3BlY2llc19wYXJhbXMkbWF4X2xpbQ0KDQpgYGANCg0KDQpgYGB7cn0NCiBwYXJhbXNfb3B0aW1fdjIgPC1zZXRQYXJhbXMocGFyYW1zX29wdGltX3YyKQ0KIHNpbV9vcHRpbSA8LSBwcm9qZWN0KHBhcmFtc19vcHRpbV92MiwgZWZmb3J0ID0wLCB0X21heCA9IDEwMCkNCg0KIHBsb3Qoc2ltX29wdGltKQ0KIHBsb3RseUJpb21hc3Moc2ltX29wdGltKQ0KIHBsb3REaWV0KHNpbV9vcHRpbSkNCmBgYA0KDQpPcHRpbWlzZSBhZ2Fpbg0KDQpgYGB7cn0NCnBhcmFtc19vcHRpbV92MkByZXNvdXJjZV9wYXJhbXMka2FwcGEgDQpgYGANCg0KYGBge3J9DQpwYXJhbXNfb3B0aW1fdjMgPC0gc3RlYWR5KHBhcmFtc19vcHRpbV92MikNCmBgYA0KDQpgYGB7cn0NCnBsb3RTcGVjdHJhKHBhcmFtc19vcHRpbV92MywgcG93ZXIgPTIpDQpgYGANCg0KYGBge3J9DQpwYXJhbXNfb3B0aW1fdjQgPC0gdHVuZUdyb3d0aChwYXJhbXNfb3B0aW1fdjMpDQpwYXJhbXNfb3B0aW1fdjQgPC0gc3RlYWR5KHBhcmFtc19vcHRpbV92NCkNCmBgYA0KDQpgYGB7cn0NCnBhcmFtc19vcHRpbV92NCA8LSByZWFkUkRTKCJwYXJhbXNfb3B0aW1fdjQuUkRTIikNCg0Kc2ltX3YzIDwtIHByb2plY3QocGFyYW1zX29wdGltX3Y0LCBlZmZvcnQgPTAsIHRfbWF4ID0gMTAwKQ0KcGxvdEJpb21hc3NWc1NwZWNpZXMocGFyYW1zX29wdGltX3Y0KQ0KcGxvdERpZXQocGFyYW1zX29wdGltX3Y0KQ0KcGxvdEJpb21hc3Moc2ltX3YzKQ0KcGxvdGx5U3BlY3RyYShzaW1fdjMpDQpwMSA8LSBwbG90U3BlY3RyYShzaW1fdjMpDQoNCiMgc2F2ZVJEUyhwYXJhbXNfb3B0aW1fdjQsICJwYXJhbXNfb3B0aW1fdjQuUkRTIikNCnRpZmYoZmlsZT0ic2F2aW5nX3NwZWN0cmFfcGxvdC50aWZmIiwNCndpZHRoPTYsIGhlaWdodD00LCB1bml0cz0iaW4iLCByZXM9NTAwKQ0KcDENCmRldi5vZmYoKQ0KDQpgYGANCklmDQpBQUQgcmVjb21tZW5kIHRoYXQgYmVudGhpYyByZXNvdXJjZSBpcyBub3QgbWVhbmluZ2Z1bCBmb3IgdG9vdGhmaXNoDQoNClJtYXggY2FuIGJlIGp1c3RpZmllZCBieSBhcHBseWluZyBhIGRlbnNpdHkgZGVwZW5kZW5jZSByZWxhdGlvbnNoaXAgYWNjb3JkaW5nIHRvIHRoZSB0cmFpdCBiYXNlZCBtb2RlbCAoQW5kZXJzb24pDQpJZiBmaW5pc2hlZCB3aXRoIGFuIG9wdGltIHJ1biwgY291bGQgcmUtaW50cm9kdWNlIGRlbnNpdHkgZGVwZW5kZW5jZSB0aGF0IGhhcyBiZWVuIG92ZXIgd3JpdHRlbiBieSBzdGVhZHkoKQ0KDQpXZSBkb24ndCBrbm93IHdoYXQgdGhlIGxldmVsIG9mIGRlbnNpdHkgZGVwZW5kZW5jZSBzaG91bGQgYmUgc2V0IGF0LiBDYW4gdXNlIHlpZWxkIGN1cnZlcywgc2Vuc2l0aXZpdHkgdG8gbW9ydGFsaXR5Li4uaGFydmVzdGluZyANCg0KUHJpc3RpbmUgd2hhbGUgYmlvbWFzcyBwcmUtd2hhbGluZy4gVGhlICdiYXNlJyBtb2RlbCBpcyBhY3R1YWxseSB0aGUgaGlnaGx5IGV4cGxvaXRlZCBzeXN0ZW0sIGNhbiBjb21wYXJlIGhpc3RvcmljYWwgd2hhbGluZyB0aW1lIHNlcmllcyAoQ2hyaXMgQ2xlbWVudHMgYW5kIEp1bGlhIGhhdmUgdGhpcyBkYXRhKQ0KDQpCb2R5IHNpemUgb2Ygd2hhbGVzIHJlc3BvbmRpbmcgdG8gZmlzaGluZyANCi0gRm9sbG93IA0KDQpFbXByaWNpYWwgc2l6ZSBkaXN0cmlicyBvZiBtYW1tYWxzDQoNCnlpZWxkDQoNCnNlYWFyb3VuZHVzDQoNCldlIGFyZSBjb25zaWRlcmluZyB0aGUgd2hhbGVzIHdpdGhpbiB0aGUgUHJ5ZHogQmF5DQoNCkdlYXIgYW5kIGNhdGNoIGFiaWxpdHkgZm9yIGtyaWxsLCBpY2UgZmlzaCBhbmQgdG9vdGhmaXNoDQoNCkNvbWJpbmUgU3RhY2V5L1Jvc2huaSBtb2RlbCBhbmQgZ2V0IGEgdG90YWwgYmlvbWFzcw0KDQoNCmBgYHtyfQ0KcGFyYW1zX29wdGltX3Y0QHNwZWNpZXNfcGFyYW1zJGVyZXBybw0KcGFyYW1zX29wdGltX3Y1IDwtIHR1bmVQYXJhbXMocGFyYW1zX29wdGltX3Y0KQ0KIyBwYXJhbXNfb3B0aW1fdjUgPC0gdHVuZUdyb3d0aChwYXJhbXNfb3B0aW1fdjQpDQoNCmdldFJlcHJvZHVjdGlvbkxldmVsKHBhcmFtc19vcHRpbV92NCkgIyBubyBkZW5zaXR5IGRlcGVuZGVuY2UgZm9yIGdyb3VwcyB3aXRoIDANCg0KIyBDYW4gdHJ5IG9wdGltaXNlIHdpdGggcmVwcm9kdWN0aW9uIGxldmVsDQoNCnBhcmFtc19vcHRpbV92NEBzcGVjaWVzX3BhcmFtcyRSX21heA0KcGFyYW1zX29wdGltX3Y0QHNwZWNpZXNfcGFyYW1zJGVyZXBybw0KDQoNCmBgYA0KRmlyc3QgZWNvc3lzdGVtIG1pemVyIG1vZGVsDQoNCmBgYHtyfQ0KIyBsaWJyYXJ5KHBhcmFsbGVsKQ0KIyAjY3JlYXRlIGEgc2V0IG9mIHBhcmFtcyBmb3IgdGhlIG9wdGltaXNhdGlvbiBwcm9jZXNzDQojICMgcGFyYW1fb3B0aW1fdjINCiMgcGFyYW1fb3B0aW1fdjIgPC0gc2V0UGFyYW1zKHBhcmFtX29wdGltX3YyKQ0KIyANCiMgI3NldCB1cCB3b3JrZXJzDQojIG5vQ29yZXMgPC0gZGV0ZWN0Q29yZXMoKSAtIDIgIyBrZWVwIHNvbWUgc3BhcmUgY29yZXMNCiMgY2wgPC0gbWFrZUNsdXN0ZXIobm9Db3Jlcywgc2V0dXBfdGltZW91dCA9IDAuNSkNCiMgc2V0RGVmYXVsdENsdXN0ZXIoY2wgPSBjbCkNCiMgY2x1c3RlckV4cG9ydChjbCwgYXMubGlzdChscygpKSkNCiMgY2x1c3RlckV2YWxRKGNsLCB7DQojICAgbGlicmFyeShtaXplckV4cGVyaW1lbnRhbCkNCiMgICBsaWJyYXJ5KG1pemVyTVIpDQojICAgbGlicmFyeShvcHRpbVBhcmFsbGVsKQ0KIyB9KQ0KIyANCiMgb3B0aW1fcmVzdWx0IDwtIG9wdGltUGFyYWxsZWw6Om9wdGltUGFyYWxsZWwocGFyPWJpb192YXJ5LGdldEVycm9yX0JpbyxwYXJhbXM9cGFyYW1zX29wdGltLCANCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ID0gcGFyYW1zQHNwZWNpZXNfcGFyYW1zJGJpb21hc3Nfb2JzZXJ2ZWQsIA0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3R5cGU9ImJpb21hc3MiLCB0aW1ldG9ydW4gPSAxMDAsIA0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSJMLUJGR1MtQiIsDQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd2VyPWMocmVwKDFlLTIwLGxlbmd0aChwYXJhbXNAc3BlY2llc19wYXJhbXMkc3BlY2llcykpLDEpLA0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHBlcj0gYyhyZXAoMTAsbGVuZ3RoKHBhcmFtc0BzcGVjaWVzX3BhcmFtcyRzcGVjaWVzKSksMWUrMTUpLA0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbGxlbD1saXN0KGxvZ2luZm89VFJVRSwgZm9yd2FyZD1UUlVFKSkNCiMgc3RvcENsdXN0ZXIoY2wpDQpgYGANCg0KDQojIyBBZGQgQmVudGhpYyBSZXNvdXJjZSBTcGVjdHJ1bQ0KDQpgYGB7cn0NCiMgU2V0IGJlbnRob3Mga2FwcGEgc2FtZSBhcyBwbGFua3RvbiBrYXBwYQ0Ka2FwcGFfYmVuIDwtIGthcHBhDQojIEFzc3VtZSBtb3JlIHNoYWxsb3cgc2xvcGUgZm9yIGJlbnRob3MNCmxhbWJkYV9iZW4gPC0gMS45DQojIFNldCBtYXhpbXVtIGJlbnRob3Mgc2l6ZQ0Kd19tYXhfYmVuIDwtIDEwDQojIEJlbnRob3Mgc3RhcnRzIGF0IGxhcmdlciBzaXplcywgY29ycmVzcG9uZGluZyB0byBhYm91dCAxLTJtbQ0Kd19taW5fYmVuIDwtIDAuMDAwMQ0KYGBgDQoNCg0KDQpOb3cgd2UgcHV0IGFsbCB0aGVzZSByZXNvdXJjZSBwYXJhbWV0ZXJzIGludG8gYSBkYXRhIGZyYW1lLg0KDQpgYGB7cn0NCk1GU09fcmVzb3VyY2VfcGFyYW1zX3YyIDwtIGRhdGEuZnJhbWUoDQogICAgcmVzb3VyY2UgPSBjKCJwbCIsICJhcCIsICJiYiIpLA0KICAgIGxhbWJkYSA9IGMobGFtYmRhLCBsYW1iZGFfYXAsIGxhbWJkYV9iZW4pLA0KICAgIGthcHBhID0gYyhrYXBwYSwgIGthcHBhX2FwLCBrYXBwYV9iZW4pLA0KICAgIHdfbWluID0gYyh3X21pbiwgd19taW5fYXAsIHdfbWluX2JlbiksDQogICAgd19tYXggPSBjKHdfbWF4LCAgd19tYXhfYXAsIHdfbWF4X2JlbikNCikNCg0KTUZTT19yZXNvdXJjZV9wYXJhbXNfdjINCmBgYA0KDQoNCmBgYHtyfQ0KcGFyYW1zX2JiIDwtIHBhcmFtc19vcHRpbV92NA0KI3NldCB2ZWN0b3JzIG9mIHBsYW5rdG9uIGFuZCBiZW50aG9zIGF2YWlsYWJpbGl0eSBmb3IgdGhlIG1vZGVsIHNwZWNpZXMgDQpwbGFua3Rvbl9hdmFpbCA8LSBjKDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuNSwgMC41LCAwLjI1KQ0KYXBfYXZhaWwgPC0gYygwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLjI1LCAwLjc1LCAwLjc1LCAwKQ0KYmJfYXZhaWwgPC0gYygwLjEsIDAsIDAuMjUsIDAuMjUsIDAsIDAuMjUsIDAuMjUsIDAuNSwgMC4yNSwgMCwgMCwgMCkNCg0KDQojcHV0IHRoZW0gaW50byBjb3JyZXNwb25kaW5nIGNvbHVtbnMgb2YgcmVzb3VyY2VfaW50ZXJhY3Rpb24gbWF0cml4DQpyZXNvdXJjZV9pbnRlcmFjdGlvbihwYXJhbXNfYmIpWywgMV0gPC0gcGxhbmt0b25fYXZhaWwNCnJlc291cmNlX2ludGVyYWN0aW9uKHBhcmFtc19iYilbLCAyXSA8LSBhcF9hdmFpbA0KcmVzb3VyY2VfaW50ZXJhY3Rpb24ocGFyYW1zX2JiKVssIDNdIDwtIGJiX2F2YWlsDQoNCmBgYA0KDQoNCldlIGNhbiBub3cgdXBkYXRlIG91ciBtb2RlbCB0byB1c2UgdGhlc2UgcmVzb3VyY2UgcGFyYW1ldGVycyB3aXRoDQoNCmBgYHtyfQ0KDQpwYXJhbXNfb3B0aW1fdjUgPC0gc2V0TXVsdGlwbGVSZXNvdXJjZXMocGFyYW1zX29wdGltX3Y0LCBNRlNPX3Jlc291cmNlX3BhcmFtc192MikNCg0KcmVzb3VyY2VfcGFyYW1zKHBhcmFtc19vcHRpbV92NCkgPC0gTUZTT19yZXNvdXJjZV9wYXJhbXNfdjINCmBgYA0KDQoNCmBgYHtyfQ0KcmVzb3VyY2VfaW50ZXJhY3Rpb24ocGFyYW1zX29wdGltX3Y0KQ0KYGBgDQoNCg0KDQpgYGB7cn0NCiNzZXQgdmVjdG9ycyBvZiBwbGFua3RvbiBhbmQgYmVudGhvcyBhdmFpbGFiaWxpdHkgZm9yIHRoZSBtb2RlbCBzcGVjaWVzIA0KcGxhbmt0b25fYXZhaWwgPC0gYygxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjUsIDAuNSwgMC4yNSkNCmFwX2F2YWlsIDwtIGMoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMC4yNSwgMC43NSwgMC43NSwgMCkNCg0KI3B1dCB0aGVtIGludG8gY29ycmVzcG9uZGluZyBjb2x1bW5zIG9mIHJlc291cmNlX2ludGVyYWN0aW9uIG1hdHJpeA0KcmVzb3VyY2VfaW50ZXJhY3Rpb24ocGFyYW1zX2d1ZXNzZWQpWywgMV0gPC0gcGxhbmt0b25fYXZhaWwNCnJlc291cmNlX2ludGVyYWN0aW9uKHBhcmFtc19ndWVzc2VkKVssIDJdIDwtIGFwX2F2YWlsDQpgYGANCg0KQ29uZmlybSBpdCB3b3JrZWQNCmBgYHtyfQ0KcmVzb3VyY2VfaW50ZXJhY3Rpb24ocGFyYW1zX2d1ZXNzZWQpDQpgYGANCg0KDQoNCg0KDQo=